以下问题可以看作是这个beamer
对于文档类别为 而不是 的情况article
。
在希伯来语演示文稿中,我希望有(非强制性的!)选项来将枚举列表的编号设置为按照希伯来语字母表的字母顺序,即而不是、、、A
等、、、等。B
C
א
ב
ג
尝试解决方案
考虑下面的 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 查看器中打开时,文件显示如下。(我仅截取了显示的相关部分。)
我希望在希伯来语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
将被替换为包含单个幻灯片的文件,如下所示。(我仅截取了显示的相关部分。)
请注意列表项的标签是如何根据演示文稿的主题进行风格化的。
我现在取消注释了两行注释,并enumerate
用以下内容替换了环境的选项列表:[label=\HeNum]
,如第一个示例中的文档类为article
。生成的 PDF 文件包含一张幻灯片,显示如下。(我仅截取了显示的相关部分。)
请注意,列表项的标签不再是风格化的。
为什么列表项的标签没有样式化?如何恢复样式?
我正在寻找一个通用的解决方案,它不假设主题是Warsaw
必然的。理想情况下,解决方案也应该简单而自然,就像article
文档类的情况一样。理想情况下,我不需要“恢复”样式;我可以只指示枚举列表使用希伯来数字,可能带有装饰(例如字母后面的点或字母周围的一对括号),魔法就会自动发生,就像使用英文字母数字时一样。
答案1
您不能使用enumitem
:beamer
正如您所见,它会覆盖各种投影仪命令,从而破坏外观和覆盖规范。
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}
答案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}