在希伯来语投影仪演示文稿中,如何根据希伯来语字母表对枚举列表的编号进行字母排序?

在希伯来语投影仪演示文稿中,如何根据希伯来语字母表对枚举列表的编号进行字母排序?

以下问题可以看作是这个beamer对于文档类别为 而不是 的情况article

在希伯来语演示文稿中,我希望有(非强制性的!)选项来将枚举列表的编号设置为按照希伯来语字母表的字母顺序,即而不是、、、A等、、、等。BCאבג


尝试解决方案

考虑下面的 LaTeX 代码,它基本上是从这个答案,略有修改。

\documentclass{article}
\usepackage[bidi=basic]{babel}
\babelprovide[import,main]{hebrew}
\babelfont{rm}[Renderer=HarfBuzz]{FreeSans}

\usepackage[shortlabels]{enumitem}
\newcommand{\HeNum}{\protect\localenumeral{letters}{\value*}}

\begin{document}
\begin{enumerate}[label=\HeNum]
   \item The woods are lovely
   \item Dark and deep
   \item But I have promises to keep
\end{enumerate}
\end{document}

当在终端中执行以下命令时:

> cd ~
> lualatex Test

文件~/Test.pdf已创建。在 PDF 查看器中打开时,文件显示如下。(我仅截取了显示的相关部分。)

A Hebrew list in an article

我希望在希伯来语beamer演示文稿中部署此技巧。我使用以下演示文稿作为起点。演示文稿保存在 中~/Test.tex,替换了此文件的先前内容。

\documentclass{beamer-rl}

\usetheme{Warsaw}

\usepackage[bidi=basic]{babel}
\babelprovide[import,main]{hebrew}
\babelprovide[import]{english}
\babelfont{rm}[Renderer=HarfBuzz]{FreeSerif}
\babelfont{sf}[Renderer=HarfBuzz]{FreeSans}
\babelfont{tt}[Renderer=HarfBuzz]{FreeMono}

%\usepackage[shortlabels]{enumitem}
%\newcommand{\HeNum}{\protect\localenumeral{letters}{\value*}}
\begin{document}
\begin{frame}
\begin{enumerate}[A]
   \item The woods are lovely
   \item Dark and deep
   \item But I have promises to keep
\end{enumerate}
\end{frame}
\end{document}

执行与之前相同的命令,该文件~/Test.pdf将被替换为包含单个幻灯片的文件,如下所示。(我仅截取了显示的相关部分。)

A Hebrew beamer presentation with an enumerated list

请注意列表项的标签是如何根据演示文稿的主题进行风格化的。

我现在取消注释了两行注释,并enumerate用以下内容替换了环境的选项列表:[label=\HeNum],如第一个示例中的文档类为article。生成的 PDF 文件包含一张幻灯片,显示如下。(我仅截取了显示的相关部分。)

A Hebrew presentation with a Hebrew enumerated list

请注意,列表项的标签不再是风格化的。

为什么列表项的标签没有样式化?如何恢复样式?


我正在寻找一个通用的解决方案,它不假设主题是Warsaw必然的。理想情况下,解决方案也应该简单而自然,就像article文档类的情况一样。理想情况下,我不需要“恢复”样式;我可以只指示枚举列表使用希伯来数字,可能带有装饰(例如字母后面的点或字母周围的一对括号),魔法就会自动发生,就像使用英文字母数字时一样。

答案1

您不能使用enumitembeamer正如您所见,它会覆盖各种投影仪命令,从而破坏外观和覆盖规范。

beamer加载enumerate 允许选择编号方案的包,但只能从固定集合中选择。您可以通过重新定义内部命令来扩展此集合:

\documentclass{beamer-rl}

\usetheme{Warsaw}

\usepackage[bidi=basic]{babel}
\babelprovide[import,main]{hebrew}
\babelprovide[import]{english}
\babelfont{rm}[Renderer=HarfBuzz]{FreeSerif}
\babelfont{sf}[Renderer=HarfBuzz]{FreeSans}
\babelfont{tt}[Renderer=HarfBuzz]{FreeMono}


\newcommand{\HeNum}[1]{\localenumeral{letters}{\value{#1}}}

\makeatletter
\pretocmd\@enloop@{\ifx H\@entemp \def\@tempa{\@enLabel\HeNum }\else}{}{\fail}
\patchcmd\@enloop@{\fi}{\fi\fi}{}{\fail}
\makeatother  
\begin{document}
\begin{frame}
\begin{enumerate}[H]
   \item The woods are lovely
   \item Dark and deep
   \item But I have promises to keep
\end{enumerate}

\begin{enumerate}[A]
   \item The woods are lovely
   \item Dark and deep
   \item But I have promises to keep
\end{enumerate}
\end{frame}
\end{document}

enter image description here

答案2

不要将该enumitem包与 beamer 一起使用,它们不兼容。

相反,您可以重新定义适当的 beamer 模板。例如枚举球项目:

% !TeX TS-program = lualatex

\documentclass{beamer-rl}

\usetheme{Warsaw}

\usepackage[bidi=basic]{babel}
\babelprovide[import,main]{hebrew}
\babelprovide[import]{english}
\babelfont{rm}[Renderer=HarfBuzz]{FreeSerif}
\babelfont{sf}[Renderer=HarfBuzz]{FreeSans}
\babelfont{tt}[Renderer=HarfBuzz]{FreeMono}


\defbeamertemplate{enumerate item}{foo}
{
  \begin{pgfpicture}{-1ex}{-0.65ex}{1ex}{1ex}
    \usebeamercolor{item projected}
    {\pgftransformscale{1.75}\pgftext{\normalsize\pgfuseshading{bigsphere}}}
    {\pgftransformshift{\pgfpoint{0pt}{0.5pt}}
      \pgftext{%
        \usebeamerfont*{item projected}%
        \color{fg}\protect\localenumeral{letters}{\theenumi}}}
  \end{pgfpicture}%
}

\begin{document}
\begin{frame}
\begingroup
\setbeamertemplate{enumerate item}[foo]
\begin{enumerate}
   \item The woods are lovely
   \item Dark and deep
   \item But I have promises to keep
\end{enumerate}
\endgroup
\end{frame}
\end{document}

enter image description here

相关内容