# Use of enumitem breaks Bengali enumeration

Consider the MWE below. Here, I am trying to use Bengali numerals for enumeration as per the solution found here.

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


The above code works fine as you can see from this output.

However, as soon as the line, \usepackage{enumitem}, is put into action, all the enumerations get numbered as zeros.

I need to use enumitem, because, without it, I am going to loose a substantial amount of formatting in my lists.

• Where can we get the fonts? I think you have to make enumitem aware of this special fonts
– user31729
Apr 3 '16 at 17:29
• @ChristianHupfer Right here. Apr 3 '16 at 17:34

Only a first version, working for digits only, not for numbers > 9.

In short: enumitem needs special counter output information for such setups, i.e. an \AddEnumerateCounter macro must be used. The special setup is valid here only for digits, unfortunately.

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

\makeatother

\begin{document}

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

\end{document}


• I'll try to update for larger numbers later on
– user31729
Apr 3 '16 at 18:01
• Yes, it works. Thanks. Waiting in anticipation for the complete solution. Apr 3 '16 at 23:59
• @Masroor: I'll try to update soon. My first trials failed, however
– user31729
Apr 4 '16 at 9:06
• @Masroor: I failed so far to extend the solution, due to expansion issues. This really bothers me. I am sorry that there's no progress
– user31729
Apr 9 '16 at 17:50
• Since the current solution serves my purpose, I will accept it. But I will keep my hopes open. Apr 9 '16 at 23:34

The babel package provides a Bengali localization of \arabic and (as an undocumented bonus feature) alph. If this is satisfactory, you can express the following without defining your own counters. This will also localize the numbers of pages, chapters, sections, table of contents entries, etc.

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


As of June 2020, an incompatibility between babel and fontspec prevents XeTeX from compiling the MWE correctly, but it works in LuaLaTeX 1.12.0. XeLaTeX from TeX Live 2019 might also work.

• I've investigated the problem with XeTeX and there is a limitation in the way this engine gets rid of the hyphen, namely, there is no way to git rid of it in XeTeX itself 😉. A trick is to set the hyphenchar to "200B, as explained here: tex.stackexchange.com/questions/124430/… . babel is assuming this character exists, but sadly not all fonts contain it. So, very likely it must be set by hand. Jun 12 '20 at 14:51
• @JavierBezos I haven’t liiked into the internals, but would \iffontchar work? Although, the character is invisible anyway, so it really shouldn’t be necessary to choose a font to “display” it. Jun 12 '20 at 18:41
• Very likely. IIR, this would mean babel shouldn't rely on HyphenChar, which is set when the font is loaded (ie, before we can test if a char exists). Jun 13 '20 at 8:17