非英语章节编号问题

非英语章节编号问题

我有以下代码,用于用孟加拉语对章节编号进行编号。

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

在此处输入图片描述

计数器的值被转换为阿拉伯数字;然后我们将结果一次映射一位数字(或可能的减号),并直接翻译成孟加拉数字。

相关内容