阿拉伯语环境中的文字编号

阿拉伯语环境中的文字编号

我想在阿拉伯语书籍环境中生成按文字方式编号的页面,在文档的 Frontmatter 中,而不是按通常的方式进行罗马编号。计算机的阿拉伯字母计数器的顺序不是数字顺序,而是另一种顺序。请注意,阿拉伯字母的数量是 28。我给出了计算机的阿拉伯语文字编号方式,以及与每个阿拉伯字母对应的值。此对应关系在以下表格中给出:

在此处输入图片描述

例如,这意味着数字 23 不是用字母数字 23(即阿拉伯字母 ث )表示,而是用“字母”كج 表示,因为计算机将此命令读为 23=20+3,并用相应的字母 ك 替换数字 20,用相应的字母 ج 替换数字 3。

为了获得数字的良好文字表示,我每翻到一页新页面,就将计数器“页面”增加 9,直到页码为 20;之后将此计数器增加 99,直到到达页码 28,即阿拉伯字母的数量。

我尝试使用以下命令和包来做到这一点......

\usepackage{ifthen}
\usepackage{everypage}

\AddEverypageHook{\ifthenelse{\value{page}<11}
                {}
                {
                \ifthenelse{\value{page}<101}
                {\addtocounter{page}{9}} 
                {
                \ifthenelse{\value{page}<999}
                {\addtocounter{page}{99}}
                {}
                }
                }
                }

这为我实现目标的第一步提供了一个很好的方法......但我对此有几个问题:

  1. 第一个问题是我使用“changepage”包检查偶数/奇数页,用图像作为奇数页的背景。现在这个操作将所有页面转换为偶数页。我该怎么做才能只更改页码而不更改页码?

  2. 当页面数量少于 28 时,我们可以使用此方法。那么对于页数大于 28 的情况呢?我想要一个计数器,它将字母 29 重新初始化为 1,并在计数器前添加第一个字母,例如 aa、ab、ac...ax、ay、az。

  3. 命令 \thepage 引用的是添加 9(或 99)之前的页面标签。如何正确引用命令 \thepage ?

  4. 什么命令可以让 '\frontmatter' 命令采用罗马数字页码?在阿拉伯语环境中,我们如何才能将书籍前言中的页码默认样式设为这种样式(称为 \arabicliteral)?(我正在考虑在阿拉伯语包中引入一个可能的宏...)

更新

为了清晰起见并满足需求,我在此处附上了生成 3 个表格的 tex 文件。我认为这里使用阿拉伯字体“简化字体”,因为我认为它几乎适用于所有系统。如果没有,我会搜索类似的字体。

\documentclass[12pt]{book} 

\usepackage{polyglossia}
\setmainlanguage[numerals=maghrib]{arabic}
\setotherlanguage{english}
\newfontfamily\arabicfont[Script=Arabic,Scale=1.2]{Simplified Arabic}
\newfontfamily\englishfont[Scale=1]{Times New Roman}

\begin{document}
\pagestyle{empty}

\begin{center}
\LR{
\begin{tabular}{|c|c|c|c|c|c|c|c|c|}
\hline
1&  2&  3   &4& 5&  6   &7  &8  &9\\
\hline
 ا  &ب& ج&  د   &ه& و&  ز   &ح& ط   \\ 
\hline
\end{tabular}
}
\vspace*{14pt}

\LR{
\begin{tabular}{|c|c|c|c|c|c|c|c|c|}
\hline
10& 20& 30  &40&    50  &60 &70 &80 &90\\
\hline
    ي&  ك&  ل&  م   &ن  &س& ع   &ف  &ص  \\ 
\hline
\end{tabular}
\vspace*{14pt}
}

\LR{
\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|}
\hline
100 &200&   300 &400&   500 &600&   700 &800&   900 &1000   \\
\hline
ق   &ر  &ش  &ت& ث   &خ  &ذ  &ض  &ظ  &   غ   
\\ 
\hline
\end{tabular}
}
\end{center}
 \end{document}

更新 2根据给出的解决方案这是@HeikoOberdiek 给出的解决方案,使用阿拉伯字体完成。这是 tex 文件

\documentclass{article}

    \usepackage{polyglossia}
    \setmainlanguage[numerals=maghrib]{arabic}
    \setotherlanguage{english}
    \newfontfamily\arabicfont[Script=Arabic,Scale=1.2]{Simplified Arabic}
    \newfontfamily\englishfont[Scale=1]{Times New Roman}

    \usepackage{alphalph}

% https://en.wikipedia.org/wiki/Abjad_numerals
\makeatletter
\newcommand*{\@arabicliteral@symbol}[1]{%
  \ifcase#1%
  \or ا\or ب\or ج\or د\or ه\or و\or ز\or ح\or ط\or ي%
  \or ك\or ل\or م\or ن\or س\or ع\or ف\or ص\or ق\or ر%
  \or ش\or ت\or ث\or خ\or ذ\or ض\or ظ\or غ%
  \else
    \@ctrerr
  \fi
}
\newalphalph\@arabicliteral{\@arabicliteral@symbol}{28}
\newcommand*{\arabicliteral}[1]{\@arabicliteral{\value{#1}}}
\makeatother

\newcounter{test}
\renewcommand*{\thetest}{\arabicliteral{test}}
\newcommand*{\printtest}{\thetest~(\the\value{test})}

\begin{document}

\setcounter{test}{1}\printtest,

\stepcounter{test}\printtest,

\stepcounter{test}\printtest, \dots,

\addtocounter{test}{22}\printtest,

\stepcounter{test}\printtest,

\stepcounter{test}\printtest,

\stepcounter{test}\printtest,

\stepcounter{test}\printtest,

\stepcounter{test}\printtest,

\stepcounter{test}\printtest,

\stepcounter{test}\printtest, \dots,

\addtocounter{test}{24}\printtest,

\stepcounter{test}\printtest,

\stepcounter{test}\printtest,

\stepcounter{test}\printtest,

\end{document} 

给出了它的汇编(每行一个字母,以从右到左的模式读取,就像阿拉伯语一样!)

在此处输入图片描述

答案1

问题 2:包alphalph提供了计数器的格式化命令,它使用一组有限的符号。有不同的方法来扩展允许的值范围。默认方法是问题的方法,如下例所示。

问题 1:如果使用上一段中的计数器格式化命令,则计数器值仍为正常值,每增加 1 个\stepcounter。因此,使用计数器的值(\value{<counter>}),奇数和偶数检测应正常工作。

问题3:随着的重新定义\thepage,阿拉伯语字面含义也被用于参考文献中。

问题 4:使用指定的计数器格式化命令\pagenumbering自动重新定义,并将页面计数器重置为 1。\thepage

使用符号、、代替阿拉伯字形的A示例:Z*+

\documentclass{article}

\usepackage{alphalph}

% https://en.wikipedia.org/wiki/Abjad_numerals
\makeatletter
\newcommand*{\@arabicliteral@symbol}[1]{%
  \ifcase#1%
  \or A\or B\or C\or D\or E\or F\or G\or H\or I\or J%
  \or K\or L\or M\or N\or O\or P\or Q\or R\or S\or T%
  \or U\or V\or W\or X\or Y\or Z\or *\or +%
  \else
    \@ctrerr
  \fi
}
\newalphalph\@arabicliteral{\@arabicliteral@symbol}{28}
\newcommand*{\arabicliteral}[1]{\@arabicliteral{\value{#1}}}
\makeatother

\newcounter{test}
\renewcommand*{\thetest}{\arabicliteral{test}}
\newcommand*{\printtest}{\thetest~(\the\value{test})}

\begin{document}
\setcounter{test}{1}\printtest,
\stepcounter{test}\printtest,
\stepcounter{test}\printtest, \dots,
\addtocounter{test}{22}\printtest,
\stepcounter{test}\printtest,
\stepcounter{test}\printtest,
\stepcounter{test}\printtest,
\stepcounter{test}\printtest,
\stepcounter{test}\printtest,
\end{document} 

结果

扩展示例

我假设,如果数字超过 28,阿拉伯文字数字就不应该合并。以下示例通过将数字放入来实现这一点\mbox。该示例还显示,页面引用正常工作。并\pagenumbering启用“阿拉伯文字”页码。

\documentclass{article}

\usepackage{polyglossia}
\setmainlanguage[numerals=maghrib]{arabic}
\setotherlanguage{english}
%\newfontfamily\arabicfont[Script=Arabic,Scale=1.2]{Simplified Arabic}
\newfontfamily\arabicfont[Script=Arabic,Scale=1.2]{FreeSerif.otf}
%\newfontfamily\englishfont[Scale=1]{Times New Roman}
\newfontfamily\englishfont[Scale=1]{lmroman10-regular.otf}

\usepackage{alphalph}

% https://en.wikipedia.org/wiki/Abjad_numerals
\makeatletter
\newcommand*{\@arabicliteral@symbol}[1]{%
  \mbox{%
    \ifcase#1%
    \or ا\or ب\or ج\or د\or ه\or و\or ز\or ح\or ط\or ي%
    \or ك\or ل\or م\or ن\or س\or ع\or ف\or ص\or ق\or ر%
    \or ش\or ت\or ث\or خ\or ذ\or ض\or ظ\or غ%
    \else
      \@ctrerr
    \fi
  }%
}
\newalphalph\@arabicliteral{\@arabicliteral@symbol}{28}
\newcommand*{\arabicliteral}[1]{\@arabicliteral{\value{#1}}}
\makeatother


\newcommand*{\test}{%
  \begin{otherlanguage}{english}
    This is page \the\value{page} or \foreignlanguage{arabic}{\thepage}.
  \end{otherlanguage}
  \label{page\the\value{page}}
  \newpage
}

\begin{document}
\pagenumbering{arabicliteral}

\begin{otherlanguage}{english}
List of page references:
\end{otherlanguage}

\pageref{page1}, \pageref{page2}, \pageref{page3}, \dots,
\pageref{page25}, \pageref{page26}, \pageref{page27}, \pageref{page28},
\pageref{page29}, \pageref{page30}, \pageref{page31}, \dots,
\pageref{page56}, \pageref{page57}, \pageref{page58}, \pageref{page59}
\medskip

\test\test\test

\addtocounter{page}{21}% omitting some pages

\test\test\test\test\test\test\test

\addtocounter{page}{24}% omitting some pages

\test\test\test\test

\end{document}

结果显示页面引用列表:

结果

相关内容