我想使用 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}