在所有帧的开头添加命令

在所有帧的开头添加命令

我需要\setRTLbidi包裹在每一帧的开头从右到左写入文本。

另一个答案没有解决问题;有什么建议吗?

\documentclass{beamer} 
\usefonttheme{serif}
\usetheme{Madrid}

\usepackage{etoolbox}  % no longer needed; loaded by Beamer from v3.36

\usepackage{bidi}

\AtBeginEnvironment{frame}{\setRTL}

\begin{document}
    \begin{frame}{frame title}
        hello world

        \begin{enumerate}
            \item first item
            \item second item
        \end{enumerate}
    \end{frame}
\end{document}

在此处输入图片描述

答案1

您不能直接使用begin通常frameetoolbox \AtBeginEnvironment, 作为在其他地方暗示过

\AtBeginEnvironment用替换你的\BeforeBeginEnvironment就足够了。即:

\BeforeBeginEnvironment{frame}{\setRTL}

然而,这可能会产生不良的副作用,因为它在环境定义之前就已经存在了。

一个替代方案如下(接入@checkframetitle), 改编自另一个类似的答案,但它不会影响幻灯片的标题:

\makeatletter
    \pretocmd\beamer@checkframetitle{\setRTL}
\makeatother

最后,你可以改为接入较早@framenotesbegin,这会影响幻灯片标题(获得与方法等效的结果\BeforeBeginEnvironment):

\makeatletter
    \pretocmd\beamer@framenotesbegin{\setRTL}
\makeatother

相关内容