在 Beamer 中居中 itemize

在 Beamer 中居中 itemize

我正在尝试(自动)将一个项目列在 Beamer 演示文稿的中心。

问题是,我找到的所有解决方案要么

  • 使用varwidthwith enumitem(这很有效,但在 beamer 中不起作用),
  • 使用表格(这将使我失去 itemize/enumerate/description 的精确覆盖语法,我更愿意保留这些语法,因为该环境将被其他人使用)或
  • 手动调整大小minipage(或者类似的东西)。

因此我开始编写一个环境,尝试计算 itemize 的宽度以将设置minipage为正确的宽度。下面的文档按预期工作,不起作用的是嵌套列表。

所以有两个问题:

  • 我真的不知道接下来该怎么办。这个问题可以解决吗(例如通过改变计算顺序,就像minipage在嵌套列表的位置工作一样)?还是我需要另一种方法?如果相同的语法(即\begin{ul}[<+-]嵌套\item<...>)也可以用其他方法实现,那也很好,我只是希望面向用户的语法是熟悉的。
  • 我目前\leftmargini在宽度计算中使用,我真的不明白如何检测我在哪个“层”以及是否应用\leftmarginii/ \leftmarginiii
\documentclass{beamer}

% adapted from https://tex.stackexchange.com/a/127014
\ExplSyntaxOn
\NewDocumentEnvironment{measureItemize}{+b}
{%
  % split the contents at \item
  \seq_set_split:Nnn \l_werner_itemize_input_seq {\item} {#1}
  % remove the first (empty) item
  \seq_pop_left:NN \l_werner_itemize_input_seq \l_tmpa_tl
  % measure each item
  \seq_map_inline:Nn \l_werner_itemize_input_seq {\measureitem{##1}}
}
{}
\seq_new:N \l_werner_itemize_input_seq

% adapted from https://tex.stackexchange.com/a/185707
\newlength{\xitemlenx}
\newlength{\xitemleny}
\newcommand{\measureitem}[1]{%
  \settowidth{\dimen0}{#1}%
  \ifdim\dimen0>\xitemlenx%
    \xitemlenx=\dimen0
  \fi
  \global\xitemleny\xitemlenx%
}

\NewDocumentEnvironment{ul}{o+b}
{%
    \begin{measureItemize}
        #2
    \end{measureItemize}
    \bigskip
    \begin{minipage}{\dim_min:nn {\linewidth} {\xitemleny+\labelsep+\itemindent+\leftmargini}}
        \begin{itemize}[#1]
            #2
        \end{itemize}
    \end{minipage}
    \bigskip
}{}
\ExplSyntaxOff

\begin{document}

\begin{frame}
    \centering
    \fbox{
    \begin{ul}[<+->]
        \item item 1
        \item item 2 is a bit longer
        \item item 3
        % \begin{ul}
        %     \item item 1
        %     \item item 2
        %     \item item 3
        % \end{ul}
    \end{ul}
    }
\end{frame}

\end{document}

在此处输入图片描述

答案1

使用表格并不意味着您不能使用覆盖。例如,您可以改编@CarLaTeX 的这个答案https://topanswers.xyz/tex?q=2000#a2242

\documentclass{beamer}

\usepackage{tabularray}
\UseTblrLibrary{counter}
\UseTblrLibrary{varwidth} 

\begin{document}
    \begin{frame}
    \centering
    \fbox{\begin{tblr}{colspec={l},
                cells={cmd=\onslide<\arabic{rownum}->,preto={{\usebeamercolor[fg]{itemize item}\usebeamertemplate{itemize item}~}}},
      }
            item 1 \\
            item 2 \\
        \end{tblr}}
    \end{frame}
\end{document}

在此处输入图片描述

相关内容