使用 tikz 的带圆圈的枚举列表

使用 tikz 的带圆圈的枚举列表

我想用孟加拉语制作一个枚举列表。我正在使用babel支持孟加拉语的软件包。我的代码如下:

\documentclass{book}

\usepackage[english]{babel}
\babelprovide[import, onchar = fonts ids]{bengali}
% \babelfont[bengali]{rm}[Renderer=Harfbuzz]{FreeSerif}
\babelfont[bengali]{rm}[Renderer=Harfbuzz,AutoFakeBold,AutoFakeSlant=0.3]{Kalpurush}
\babelcharproperty{`।}{locale}{bengali}

% draw figures
\usepackage{tikz}

% circled numbering
\usepackage{enumitem}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{%
            \node[shape=circle,fill=black!20,inner sep=2pt] (char) {#1};}}
            
% bangla numerals
\babelprovide[maparabic,alph=alphabetic]{bengali}


\begin{document}

\subsubsection*{গণিতের চারটি নিয়ম}

\begin{enumerate}[label=\protect\circled{\arabic*}]
    \item যোগের জন্য দেওয়া সংখ্যাগুলোর যেকোন একটিকে অথবা দুটিকেই কাছাকাছি কোন রাউন্ড ফিগার করে নিই। কোন সংখ্যাকে রাউন্ড করতে হলে তার সাথে অন্য একটি ছোট সংখ্যা যোগ বা বিয়োগ করে তাকে ১০ এর গুণিতক আকারে লিখি। 
    \item এবার রাউন্ড করা সংখ্যার সাথে অন্য সংখ্যাটি সহজেই যোগ করে ফেলি। যোগের সময় রাউন্ড করতে নেওয়া অতিরিক্ত সংখ্যাটি আলাদা রাখি।
    \item এখন প্রাপ্ত যোগফলের সাথে অতিরিক্ত সংখ্যাটি যোগ বা বিয়োগ (যেখানে যেটা লাগবে) করে দিই। তাহলে, আমরা পেয়ে গেলাম আমাদের নির্ণেয় যোগফল।
\end{enumerate}

\end{document}

使用此代码我得到了以下输出。您将看到文本未显示。

在此处输入图片描述

但我想要这样的东西:

在此处输入图片描述

我怎样才能实现我想要的输出?

答案1

已编辑我用一个完整的示例扩展了第 2 点,并修改了第 1 点,因为它提出了一个问题。无论如何,对于大段文本,明确选择语言会更好。

tikz我在上面的评论中猜测的是正确的。它与/中的 hack 有关pgf,它会切换到空字体。有两种选择:

1.我不确定为什么以下解决方法(基本上是@JasperHabicht 建议的)会显示字体,同时会错误地呈现某些字符。

\begin{enumerate}[label=\foreignlanguage{bengali}\protect\circled{\arabic*}}]

它可能与其他脚本一起工作,但在这种情况下它不是解决方案。

2.在之前写下以下一段代码\begin{document}

\makeatletter
\AtBeginDocument{%
 \def\bbl@mapdir#1{%
   {\def\languagename{#1}%
    \let\bbl@ifrestoring\@firstoftwo % To avoid font warning
    \bbl@switchfont
    \ifnum\fontid\font>\z@
      \directlua{
        Babel.locale_props[\the\csname bbl@id@@#1\endcsname]%
              ['/\bbl@prefontid'] = \fontid\font\space}%
    \fi}}}%
\makeatother

以下是完整示例:

\documentclass{book}

\usepackage[english]{babel}
\babelprovide[import, onchar = fonts ids]{bengali}
% \babelfont[bengali]{rm}[Renderer=Harfbuzz]{FreeSerif}
\babelfont[bengali]{rm}[Renderer=Harfbuzz,AutoFakeBold,AutoFakeSlant=0.3]{Kalpurush}
\babelcharproperty{`।}{locale}{bengali}

% draw figures
\usepackage{tikz}

% circled numbering
\usepackage{enumitem}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{%
            \node[shape=circle,fill=black!20,inner sep=2pt] (char) {#1};}}

% bangla numerals
\babelprovide[maparabic,alph=alphabetic]{bengali}

\makeatletter
\AtBeginDocument{%
 \def\bbl@mapdir#1{%
   {\def\languagename{#1}%
    \let\bbl@ifrestoring\@firstoftwo % To avoid font warning
    \bbl@switchfont
    \ifnum\fontid\font>\z@
      \directlua{
        Babel.locale_props[\the\csname bbl@id@@#1\endcsname]%
              ['/\bbl@prefontid'] = \fontid\font\space}%
    \fi}}}%
\makeatother

\begin{document}

\subsubsection*{গণিতের চারটি নিয়ম}

\begin{enumerate}[label=\protect\circled{\arabic*}]
    \item যোগের জন্য দেওয়া সংখ্যাগুলোর যেকোন একটিকে অথবা দুটিকেই কাছাকাছি কোন রাউন্ড ফিগার করে নিই। কোন সংখ্যাকে রাউন্ড করতে হলে তার সাথে অন্য একটি ছোট সংখ্যা যোগ বা বিয়োগ করে তাকে ১০ এর গুণিতক আকারে লিখি। 
    \item এবার রাউন্ড করা সংখ্যার সাথে অন্য সংখ্যাটি সহজেই যোগ করে ফেলি। যোগের সময় রাউন্ড করতে নেওয়া অতিরিক্ত সংখ্যাটি আলাদা রাখি।
    \item এখন প্রাপ্ত যোগফলের সাথে অতিরিক্ত সংখ্যাটি যোগ বা বিয়োগ (যেখানে যেটা লাগবে) করে দিই। তাহলে, আমরা পেয়ে গেলাম আমাদের নির্ণেয় যোগফল।
\end{enumerate}

\end{document}

在此处输入图片描述

相关内容