我有以下代码,用于用孟加拉语对章节编号进行编号。
\makeatletter
\def\bengalidigits#1{\expandafter\@bengali@digits #1@}
\def\@bengali@digits#1{%
\ifx @#1
\else
\ifx0#1০\else\ifx1#1১\else\ifx2#1২\else\ifx3#1৩\else\ifx4#1৪\else\ifx5#1৫\else\ifx6#1৬\else\ifx7#1৭\else\ifx8#1৮\else\ifx9#1৯\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
\expandafter\@bengali@digits
\fi
}
\makeatother
\def\bengalinumber#1{\bengalidigits{\number#1}}
\def\bengalinumeral#1{\bengalinumber{\csname c@#1\endcsname}}
\renewcommand\thesection{\bengalinumeral{section}}
但是,这只会将章节编号翻译成孟加拉语。它不会翻译子章节或子子章节。请参见下图以更清楚地理解。
如您所见,只有章节编号发生了变化。但是子章节和子子章节编号仍然是英文的。谢谢。
答案1
喜欢@MarkusG. 已在评论中提出建议您还必须更改定义以\thesubsection
改变小节编号。
这个答案还包含一个,恕我直言,更好的孟加拉计数器格式定义(我称之为\bengalinum
),它用于\ifcase
选择正确的数字而不是深度嵌套的\ifx
结构。此外,通过使用 TeX 的分隔参数抓取规则而不是使用测试,可以更快地检查数字的结尾\ifx
。
\documentclass[]{article}
\usepackage{duckuments}
\makeatletter
\long\def\@gobbletorelax#1\relax{}
\newcommand\bengalinum[1]{\expandafter\@bengalinum\csname c@#1\endcsname}
\newcommand\@bengalinum[1]{\expandafter\@bengalinum@\the#1\relax}
\newcommand\@bengalinum@[1]
{%
\@gobbletorelax#1\@bengalinum@end\relax
\@bengalinum@digit{#1}%
}
\newcommand\@bengalinum@digit[1]
{%
\ifcase\numexpr`#1-`0\relax
০\or % 0
১\or % 1
২\or % 2
৩\or % 3
৪\or % 4
৫\or % 5
৬\or % 6
৭\or % 7
৮\or % 8
৯\else % 9
-\fi % not a digit, must be a sign
\@bengalinum@
}
\def\@bengalinum@end#1\@bengalinum@digit#2{}
\makeatother
\renewcommand*\thesection{\bengalinum{section}}
\renewcommand*\thesubsection{\thesection.\bengalinum{subsection}}
\begin{document}
\duckument
\end{document}
(这里没有显示输出,因为我不知道要使用哪种字体才能实现这个功能)
答案2
\ifx
我建议不要使用长链expl3
。
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Kohinoor Bangla}
\ExplSyntaxOn
\NewExpandableDocumentCommand{\bengalinum}{m}
{
\israt_bengalinum:e { \int_to_arabic:n { \value{#1} } }
}
\cs_new:Nn \israt_bengalinum:n
{
\tl_map_function:nN { #1 } \__israt_bengalinum_digit:n
}
\cs_generate_variant:Nn \israt_bengalinum:n { e }
\cs_new:Nn \__israt_bengalinum_digit:n
{
\str_case:nnF { #1 }
{
{0}{০}
{1}{১}
{2}{২}
{3}{৩}
{4}{৪}
{5}{৫}
{6}{৬}
{7}{৭}
{8}{৮}
{9}{৯}
}
{#1}
}
\ExplSyntaxOff
\renewcommand{\thesection}{\bengalinum{section}}
\renewcommand{\thesubsection}{\thesection.\bengalinum{subsection}}
\renewcommand{\thepage}{\bengalinum{page}}
\newcounter{test}
\renewcommand{\thetest}{\bengalinum{test}}
\begin{document}
\tableofcontents
\section{Introduction}
\subsection{Test 1}
\subsection{Test 2}
\setcounter{test}{-3}$\thetest$
\setcounter{test}{1234567890}\thetest
\section{Another}
\subsection{Test 1}
\subsection{Test 2}
\end{document}
计数器的值被转换为阿拉伯数字;然后我们将结果一次映射一位数字(或可能的减号),并直接翻译成孟加拉数字。