我想在阿拉伯语书籍环境中生成按文字方式编号的页面,在文档的 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}}
{}
}
}
}
这为我实现目标的第一步提供了一个很好的方法......但我对此有几个问题:
第一个问题是我使用“changepage”包检查偶数/奇数页,用图像作为奇数页的背景。现在这个操作将所有页面转换为偶数页。我该怎么做才能只更改页码而不更改页码?
当页面数量少于 28 时,我们可以使用此方法。那么对于页数大于 28 的情况呢?我想要一个计数器,它将字母 29 重新初始化为 1,并在计数器前添加第一个字母,例如 aa、ab、ac...ax、ay、az。
命令 \thepage 引用的是添加 9(或 99)之前的页面标签。如何正确引用命令 \thepage ?
什么命令可以让 '\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}
结果显示页面引用列表: