標準逐項和枚舉符號的垂直對齊方式在 Beamer 中不一致。下面是帶有一些常見符號和手動放置參考線的 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}