也许问题不够简单——如果是这样,请告诉我。
由于我不明白不同包之间的联系,所以我不知道正确的标题是什么。
有关的
这个问题在某种程度上是
并且还包括
介绍
beamer
基本思想是,我使用以下方法计算演示的进度(百分比)
100*\insertframenumber/\inserttotalframenumber
我添加了一个min(progress in percent,100)
围绕这一切的东西,因为在第一次运行中\inserttotalframenumber
,1
我不希望进度超过 100。
目前我不知道哪个 LaTeX 包负责我可以
min
在这里使用该函数。
所以实际上看起来像
min((100*\insertframenumber/\inserttotalframenumber),100)
如果有附录,此过程将会失败,因为我不希望将附录幻灯片考虑在内。
如果有附录,则此方法
min((100*\insertframenumber/(\beamer@startpageofappendix-1))
有效。关键是\beamer@startpageofappendix
。但如果没有附录,它会失败,因为那时\beamer@startpageofappendix-1
是-1
(减一)。
主要问题
我认为,如果有一个检查,
\beamer@startpageofappendix
为零在代码中。根据结果,将使用方法 a) (\inserttotalframenumber
) 或 b) ( )。\beamer@startpageofappendix-1
代码
\documentclass[t]{beamer}
\usepackage{tikz}
\usepackage{calc}
\usepackage{xparse}
\ExplSyntaxOn
\int_new:N \l_beamer_percentage_int
\prop_new:N \g_beamer_percentage_prop
\makeatletter
\NewDocumentCommand{\myProgressPercent}{}{%
\int_set:Nn \l_beamer_percentage_int {
\fp_to_int:n {
\fp_eval:n {min((100*\insertframenumber/(\beamer@startpageofappendix-1)),100)}
%\fp_eval:n {min((100*\insertframenumber/\inserttotalframenumber),100)}
}
}
\prop_gput:NnV \g_beamer_percentage_prop {percentage} { \l_beamer_percentage_int }
\prop_item:Nn \g_beamer_percentage_prop {percentage}
}
\makeatother
\ExplSyntaxOff
\begin{document}
\foreach \n in {1,...,10}{
%------------------
\begin{frame}
\frametitle{Slide \n}
Progress is \myProgressPercent\,\%
\end{frame}
%------------------
}
% comment \appendix in and out to see the effect
\appendix
\foreach \n in {1,...,3}{
%------------------
\begin{frame}
\frametitle{Appendix Slide \n}
Progress is \myProgressPercent\,\% (Should always be 100\,\%)
\end{frame}
%------------------
}
\end{document}
它有效!
谢谢大家-这就是我想要实现的目标的说明。
答案1
我不确定为什么需要使用这种间接方式:该命令甚至可以完全扩展:
\documentclass[t]{beamer}
\usepackage{tikz}
\usepackage{calc}
\usepackage{xparse}
\ExplSyntaxOn
\DeclareExpandableDocumentCommand{\myProgressPercent}{}
{
\fp_to_int:n
{
min(
100*\insertframenumber
/
(
\use:c{beamer@startpageofappendix} - 1 > 0
?
\use:c{beamer@startpageofappendix} - 1
:
\inserttotalframenumber
)
,
100
)
}
}
\ExplSyntaxOff
\begin{document}
\foreach \n in {1,...,10}{
%------------------
\begin{frame}
\frametitle{Slide \n}
Progress is \myProgressPercent\,\%
\end{frame}
%------------------
}
% comment \appendix in and out to see the effect
\appendix
\foreach \n in {1,...,3}{
%------------------
\begin{frame}
\frametitle{Appendix Slide \n}
Progress is \myProgressPercent\,\% (Should always be 100\,\%)
\end{frame}
%------------------
}
\end{document}
我们检查是否\beamer@startpageofappendix
设置为某个数字(当然大于一),在这种情况下,我们使用它(小于一)。否则我们使用\inserttotalframenumber
。
请注意,对于您的预期应用,您甚至可以说
\includegraphics{\myProgressPercent.png}
因为\myProgressPercent
只会扩展为一个数字。
答案2
\documentclass[t]{beamer}
\usepackage{tikz}
\usepackage{xparse}
\ExplSyntaxOn
\int_new:N \l_beamer_percentage_int
\prop_new:N \g_beamer_percentage_prop
\NewDocumentCommand \myProgressPercent { }
{
\int_set:Nn \l_beamer_percentage_int
{
\fp_to_int:n
{
\tl_if_empty:cTF { beamer@startpageofappendix }
{
\fp_eval:n
{
min(100*\insertframenumber/\inserttotalframenumber,100)
}
}
{
\fp_eval:n
{
min(100*\insertframenumber/(\use:c {beamer@startpageofappendix}-1),100)
}
}
}
}
\prop_gput:NnV \g_beamer_percentage_prop {percentage} { \l_beamer_percentage_int }
\prop_item:Nn \g_beamer_percentage_prop {percentage}
}
\ExplSyntaxOff
\begin{document}
\foreach \n in {1,...,10}{
% ------------------
\begin{frame}{Slide \n}
Progress is \myProgressPercent\,\%
\end{frame}
% ------------------
}
% comment \appendix in and out to see the effect
%\appendix
\foreach \n in {1,...,3}{
% ------------------
\begin{frame}{Appendix Slide \n}
Progress is \myProgressPercent\,\% (Should always be 100\,\%)
\end{frame}
% ------------------
}
\end{document}
稍微简化的版本。
\documentclass[t]{beamer}
\usepackage{tikz}
\usepackage{xparse}
\ExplSyntaxOn
\DeclareExpandableDocumentCommand \myProgressPercent { }
{
\tl_if_empty:cTF { beamer@startpageofappendix }
{
\fp_to_int:n
{
min(100*\insertframenumber/\inserttotalframenumber,100)
}
}
{
\fp_to_int:n
{
min(100*\insertframenumber/(\use:c {beamer@startpageofappendix}-1),100)
}
}
}
\ExplSyntaxOff
\begin{document}
\foreach \n in {1,...,10}{
% ------------------
\begin{frame}{Slide \n}
Progress is \myProgressPercent\,\%
\end{frame}
% ------------------
}
% comment \appendix in and out to see the effect
%\appendix
\foreach \n in {1,...,3}{
% ------------------
\begin{frame}{Appendix Slide \n}
Progress is \myProgressPercent\,\% (Should always be 100\,\%)
\end{frame}
% ------------------
}
\end{document}