我正在尝试(自动)将一个项目列在 Beamer 演示文稿的中心。
问题是,我找到的所有解决方案要么
- 使用
varwidth
withenumitem
(这很有效,但在 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}