使用 enumitem 会破坏孟加拉语枚举

使用 enumitem 会破坏孟加拉语枚举

考虑下面的 MWE。在这里,我尝试使用孟加拉数字根据找到的解决方案进行枚举这里

\documentclass{article}

% For bilingual document
\usepackage{fontspec}
\usepackage{polyglossia}

% Bangla
\setmainlanguage[numerals=Devanagari]{bengali}
\newfontfamily\bengalifont[Script=Bengali]{SolaimanLipi}
\newfontfamily\bengalifontbf[Script=Bengali]{SolaimanLipi}
\newfontfamily\bengalifonttt[Script=Bengali]{SolaimanLipi}
\newfontfamily\bengalifontsf[Script=Bengali]{SolaimanLipi}
\newfontfamily\bengalifontit[Script=Bengali]{SolaimanLipi}

% English
\setotherlanguage{english}

% Times New Roman used
\newfontfamily{\englishfont}[Mapping=tex-text, Ligatures=TeX]{Times New Roman}

% Bangla numerals
\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
}

\def\bengalinumber#1{\bengalidigits{\number#1}}
\def\bengalinumeral#1{\bengalinumber{\csname c@#1\endcsname}}

\renewcommand\theenumi{\bengalinumeral{enumi}}

\makeatother

% \usepackage{enumitem}

\begin{document}

\begin{enumerate}
\item এক
\item দুই
\item তিন
\end{enumerate}


\end{document}

从此输出可以看出,上述代码运行良好。

在此处输入图片描述

然而,一旦该行\usepackage{enumitem}开始执行,所有枚举都会被编号为零。

在此处输入图片描述

我需要使用enumitem,因为如果没有它,我将丢失列表中的大量格式。

答案1

仅为第一个版本,仅适用于数字,不适用于数字 > 9。

简而言之:enumitem此类设置需要特殊的计数器输出信息,即\AddEnumerateCounter必须使用宏。遗憾的是,此处的特殊设置仅对数字有效。

\documentclass{article}

% For bilingual document
\usepackage{fontspec}
\usepackage{polyglossia}


 \usepackage{enumitem}


% Bangla
\setmainlanguage[numerals=Devanagari]{bengali}
\newfontfamily\bengalifont[Script=Bengali]{SolaimanLipi}
\newfontfamily\bengalifontbf[Script=Bengali]{SolaimanLipi}
\newfontfamily\bengalifonttt[Script=Bengali]{SolaimanLipi}
\newfontfamily\bengalifontsf[Script=Bengali]{SolaimanLipi}
\newfontfamily\bengalifontit[Script=Bengali]{SolaimanLipi}

% English
\setotherlanguage{english}

% Times New Roman used
%\newfontfamily{\englishfont}[Mapping=tex-text, Ligatures=TeX]{Times New Roman}

% Bangla numerals
\makeatletter
\def\bengalidigits#1{\expandafter\@bengali@digits #1}
\def\@bengali@digits#1{%
  \ifcase #1
  ০\or১\or২\or৩\or৪\or৫\or৬\or৭\or৮\or৯\fi
}


\def\bengalinumber#1{\bengalidigits{\number#1}}
\def\bengalinumeral#1{\bengalinumber{\csname c@#1\endcsname}}


\AddEnumerateCounter*{\bengalnumeral}{\bengalinumeral}{5}

\makeatother


\begin{document}

\begin{enumerate}[label={\bengalinumeral*}]
\item এক
\item দুই
\item তিন
\end{enumerate}


\end{document}

在此处输入图片描述

答案2

babel软件包提供了 和 的孟加拉语本地化版本\arabic(作为未记录的附加功能)alph。如果这令人满意,您可以表达以下内容而无需定义自己的计数器。这还将本地化页码、章节、部分、目录条目等。

\tracinglostchars=2 % Warn if a glyph is not in the current font
\documentclass[11pt]{article}
\usepackage{iftex}
\usepackage{enumitem}

\ifLuaTeX
  \usepackage[english, bidi=basic, layout=sectioning.counters]{babel}
  \usepackage{fontspec}
  \defaultfontfeatures{Renderer=HarfBuzz, Scale=MatchLowercase, Ligatures = TeX}
\else % XeLaTeX?
  \usepackage[english, bidi=default, layout=sectioning.counters]{babel}
  \usepackage{fontspec}
  \defaultfontfeatures{Scale=MatchLowercase, Ligatures = TeX}
\fi

\babelprovide[import, main, maparabic, alph=alphabetic]{bengali}

%% From: https://github.com/potasiyam/Kalpurush
%% A matching font family might be Gentium.
\babelfont{rm}
          [Scale = 1.0,
           BoldFont = *,
           BoldFeatures = {FakeBold = 1.1}
          ]{Kalpurush}

\begin{document}

\section*{বাংলায়  enumeration }
\begin{enumerate}[label=\arabic*।]
   \item  1st item
   \item 2nd item
     \begin{enumerate}[label=(\alph*)]
       \item 1st sub item
       \item 2nd sub item 
     \end{enumerate}
\end{enumerate}

\end{document}

Kalpurush 样品

截至 2020 年 6 月,babel和之间的不兼容性fontspec导致 XeTeX 无法正确编译 MWE,但它可以在 LuaLaTeX 1.12.0 中运行。TeX Live 2019 中的 XeLaTeX 可能也可以运行。

相关内容