对 itemize 环境进行小幅修改,以便使用 beamer 进行阿拉伯语演示

对 itemize 环境进行小幅修改,以便使用 beamer 进行阿拉伯语演示

我想使用 beamer 将列表的对齐方式改为右对齐(用于阿拉伯语演示)。

如果环境enumerate使用频繁,我们可以添加一些代码,如下所示:

\let\oldenumerate\enumerate
\def\enumerate{\oldenumerate\raggedleft} 

在这种情况下,我们重新定义enumerate环境,使其项目向右对齐。

如果我们尝试对环境使用相同的方法,itemize则无法获得相同的结果

\let\olditemize\itemize
\def\itemize{\olditemize\raggedleft}   

下面的例子说明了这个问题:

\documentclass{beamer}
\usepackage{tikz}
\usepackage{polyglossia}
\setdefaultlanguage[numerals=maghrib]{arabic}
\setotherlanguage{english}
\newfontfamily\arabicfont[Script=Arabic]{Amiri}
\newfontfamily\arabicfontsf[Script=Arabic]{Amiri}

\makeatletter
\newcommand{\RTList}{\raggedleft\rightskip\@totalleftmargin} 
\makeatother

\let\oldenumerate\enumerate
\def\enumerate{\oldenumerate\RTList}

\let\olditemize\itemize
\def\itemize{\olditemize\RTList}

\setbeamertemplate{itemize item}[circle]

\begin{document}

\begin{frame}{}

\begin{enumerate}
\item
نص عربي هنا بالقائمة
\end{enumerate}

\begin{itemize}
\item
نص عربي هنا بالقائمة
\end{itemize}

\begin{itemize}\RTList
\item
نص عربي هنا بالقائمة
\end{itemize}

\end{frame}

\end{document}

我们得到: 在此处输入图片描述 有什么建议可以解决这个问题吗?谢谢。

答案1

不同之处在于,beamer重新定义itemize为具有可选参数,而没有enumerate。因此,您尝试修补\itemize会在错误的位置添加代码。

它的工作原理是xpatch

\documentclass{beamer}
\usepackage{tikz}
\usepackage{xpatch}
\usepackage{polyglossia}
\setdefaultlanguage[numerals=maghrib]{arabic}
\setotherlanguage{english}
\newfontfamily\arabicfont[Script=Arabic]{Amiri}
\newfontfamily\arabicfontsf[Script=Arabic]{Amiri}

\makeatletter
\newcommand{\RTList}{\raggedleft\rightskip\@totalleftmargin} 
\makeatother

\xapptocmd{\enumerate}{\RTList}{}{}
\xapptocmd{\itemize}{\RTList}{}{}

\setbeamertemplate{itemize item}[circle]

\begin{document}

\begin{frame}{}

\begin{enumerate}
\item
نص عربي هنا بالقائمة
\end{enumerate}

\begin{itemize}
\item
نص عربي هنا بالقائمة
\end{itemize}

\begin{itemize}\RTList
\item
نص عربي هنا بالقائمة
\end{itemize}

\end{frame}

\end{document}

在此处输入图片描述

相关内容