Beamer 中标准 itemize 和 enumerate 符号的垂直对齐方式不一致。下面是带有一些常用符号和手动放置的参考线的 MWE。输出,代码:
\documentclass{beamer}
\usepackage[absolute,overlay]{textpos}
\begin{document}
\begin{frame}
\begin{columns}[onlytextwidth]
\column{0.15\textwidth}
\setbeamertemplate{enumerate item}[circle]
\setbeamertemplate{itemize item}[circle]
\begin{itemize}
\item Txq
\end{itemize}
\begin{enumerate}
\item Txq
\end{enumerate}
\column{0.15\textwidth}
\setbeamertemplate{enumerate item}[ball]
\setbeamertemplate{itemize item}[ball]
\begin{itemize}
\item Txq
\end{itemize}
\begin{enumerate}
\item Txq
\end{enumerate}
\column{0.7\textwidth}
\setbeamertemplate{enumerate item}[square]
\setbeamertemplate{itemize item}[default]
\begin{itemize}
\item Txq
\end{itemize}
\begin{enumerate}
\item Txq
\end{enumerate}
\end{columns}
\begin{textblock*}{3cm}(11mm,37.58mm)
\rule{46mm}{0.1pt}
\end{textblock*}
\begin{textblock*}{3cm}(11mm,44.46mm)
\rule{46mm}{0.1pt}
\end{textblock*}
\end{frame}
\end{document}
符号应该居中的具体位置可能是一个个人喜好问题,但有些符号看起来不太对,而且当使用多个符号时(例如,一个用于项目,另一个用于子项目),不一致的情况显然很糟糕。(这里似乎有一些 Beamer 改进的空间。)如何修复它?
我ball
默认使用 itemize,但circle
使用 enumerate(使数字更清晰可见)。在我看来,这两个符号的位置都太低了。我发现可以通过beamerbaseauxtemplates.sty
按照下面的方法编辑来调整垂直位置。查看评论以了解更改的位置。
% Itemize items, ball
\defbeamertemplate{itemize item}{ball}{\raise0.9pt\beamer@usesphere{item projected}{bigsphere}} % "raise" increased to lift the ball
[...]
% Enumerate items, circle
\defbeamertemplate{enumerate item}{circle}
{
\usebeamerfont*{item projected}%
\usebeamercolor[bg]{item projected}%
\begin{pgfpicture}{-1ex}{-0.3ex}{1ex}{2ex} % second argument lowered to raise the circle
\pgfpathcircle{\pgfpoint{0pt}{.75ex}}{1.2ex}
\pgfusepath{fill}
\pgftext[base]{\color{fg}\insertenumlabel}
\end{pgfpicture}
}
但是,似乎最好在文件本身中进行调整(以便可以可靠地在任何地方产生相同的输出)。当我尝试将这些更改适应文档的序言时,我陷入了困境。
答案1
您可以使用多种方法。以下是两种简单的方法:
enumerate item
用新名称定义,mycircle
例如circle
如果你不需要在不同的模板之间切换,那么你可以使用
\setbeamertemplate{enumerate item}{...}
直接定义模板
这两种方法的优点在于您仍然可以使用原始定义。
除此之外,您可以在重新定义模板之前取消定义模板,如@Marijn 在评论中所建议的那样,或者您可以修补模板。
\documentclass{beamer}
% methode 1:
\defbeamertemplate{enumerate item}{mycircle}
{
\usebeamerfont*{item projected}%
\usebeamercolor[bg]{item projected}%
\begin{pgfpicture}{-1ex}{-2ex}{1ex}{2ex} % second argument lowered to raise the circle
\pgfpathcircle{\pgfpoint{0pt}{.75ex}}{1.2ex}
\pgfusepath{fill}
\pgftext[base]{\color{fg}\insertenumlabel}
\end{pgfpicture}%
}
[action]
{\setbeamerfont{item projected}{size=\scriptsize}}
\setbeamertemplate{enumerate item}[mycircle]
\makeatletter
\defbeamertemplate{itemize item}{myball}{\raise4pt\beamer@usesphere{item projected}{bigsphere}}
\makeatother
\setbeamertemplate{itemize item}[myball]
% methode 2:
%\setbeamertemplate{enumerate item}
%{
% \usebeamerfont*{item projected}%
% \usebeamercolor[bg]{item projected}%
% \begin{pgfpicture}{-1ex}{-2ex}{1ex}{2ex} % second argument lowered to raise the circle
% \pgfpathcircle{\pgfpoint{0pt}{.75ex}}{1.2ex}
% \pgfusepath{fill}
% \pgftext[base]{\color{fg}\insertenumlabel}
% \end{pgfpicture}%
%}
%\setbeamerfont{item projected}{size=\scriptsize}
%
%\makeatletter
%\setbeamertemplate{itemize item}{\raise4pt\beamer@usesphere{item projected}{bigsphere}}
%\makeatother
\begin{document}
\begin{frame}
\begin{enumerate}
\item Txq
\end{enumerate}
\begin{itemize}
\item Txq
\end{itemize}
\end{frame}
\end{document}