Beamer 中逐項/枚舉符號的垂直放置

Beamer 中逐項/枚舉符號的垂直放置

標準逐項和枚舉符號的垂直對齊方式在 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

您可以使用多種方法。這裡有兩個簡單的:

  1. 定義enumerate item一個新名稱,例如mycircle代替circle

  2. 如果不需要在不同模板之間切換,那麼可以使用\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}

在此輸入影像描述

相關內容