![在所有帧的开头添加命令](https://linux22.com/image/377669/%E5%9C%A8%E6%89%80%E6%9C%89%E5%B8%A7%E7%9A%84%E5%BC%80%E5%A4%B4%E6%B7%BB%E5%8A%A0%E5%91%BD%E4%BB%A4.png)
我需要\setRTL
从bidi
包裹在每一帧的开头从右到左写入文本。
另一个答案没有解决问题;有什么建议吗?
\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
通常frame
的etoolbox
\AtBeginEnvironment
, 作为在其他地方暗示过。
\AtBeginEnvironment
用替换你的\BeforeBeginEnvironment
就足够了。即:
\BeforeBeginEnvironment{frame}{\setRTL}
然而,这可能会产生不良的副作用,因为它在环境定义之前就已经存在了。
一个替代方案如下(接入@checkframetitle
), 改编自另一个类似的答案,但它不会影响幻灯片的标题:
\makeatletter
\pretocmd\beamer@checkframetitle{\setRTL}
\makeatother
最后,你可以改为接入较早@framenotesbegin
,这会影响幻灯片标题(获得与方法等效的结果\BeforeBeginEnvironment
):
\makeatletter
\pretocmd\beamer@framenotesbegin{\setRTL}
\makeatother