如何用 π 的位数增加来编号帧?举例来说,我希望帧编号如下
3 (第一张幻灯片)
3.1(第二张幻灯片)
3.14(第三张幻灯片)
... 等等。
这个问题困扰了我很长时间;实际上自从我在 3 月 14 日(也称为 pi-day:)发表演讲以来。
我目前的解决方法是手动插入帧编号——这在更改幻灯片顺序时当然非常烦人。
\documentclass[t]{beamer}
\usepackage[absolute,overlay]{textpos}
\setbeamertemplate{navigation symbols}{}
\newcommand{\pifoot}[1]{
\begin{textblock*}{120mm}(0mm,84.3mm)
\raggedleft #1
\end{textblock*}
}
\begin{document}
\begin{frame}
\pifoot{3}
\end{frame}
\begin{frame}
\pifoot{3.1}
\end{frame}
\begin{frame}
\pifoot{3.14}
\end{frame}
\end{document}
编辑:
根据 Reds 的出色回答,我编写了一个朴实无华的解决方案。它放弃了新的计数器,转而使用当前页码。
\documentclass[t]{beamer}
\usepackage[absolute,overlay]{textpos}
\setbeamertemplate{navigation symbols}{}
\usepackage{xstring}
\setbeamertemplate{footline}{%
\begin{picture}(54,12.5)(0,0)
\put(0.9,0.52){%
\begin{minipage}[b][12.5mm][c]{112.5mm}
\raggedleft
3\StrLeft{.141592653589793238462643383279502884197169399375105820974944592307816406286 208998628034825342117067982148086513282306647093844609550582231725359408128481}{\arabic{framenumber}}
\end{minipage}
}
\end{picture}
}
\begin{document}
\begin{frame}
\end{frame}
\begin{frame}
\end{frame}
\end{document}
答案1
编辑
我没有成功使用算法来计算圆周率的数字,但我可以通过网络使用命令\write18
( LaTeX
require --shell-enabled
) 和 shell 命令wget
和来获取它们sed
。您需要做的就是替换行
\CatchFileDef{\PiG}{pi.txt}
在下面的代码中:
\IfFileExists{./digits.txt}{}
{
\immediate\write18{\detokenize{wget http://www.geom.uiuc.edu/~huberty/math5337/groupe/digits.html -O digits.txt}}
\immediate\write18{sed -i '/[0-9]$/!d' digits.txt}
\immediate\write18{sed -i '1,13!d' digits.txt}
\immediate\write18{sed -i 's/ //g' digits.txt}
}
\CatchFileDef{\PiG}{digits.txt}
这是对@user36411答案的正确修改。只需创建一个pi.txt
包含所需圆周率位数的文件即可。
\documentclass[t]{beamer}
\usepackage{xstring,ifthen,catchfile,forloop}
\usepackage[absolute,overlay]{textpos}
\setbeamertemplate{navigation symbols}{}
\CatchFileDef{\PiG}{pi.txt}
\newcounter{Pi}
\setcounter{Pi}{1}
\newcommand{\pifoot}{
\ifthenelse{\arabic{Pi}=2}{\stepcounter{Pi}}{}
\begin{textblock*}{120mm}(0mm,84.3mm)
\raggedleft \StrLeft{\PiG}{\arabic{Pi}}
\end{textblock*}
\stepcounter{Pi}
}
\begin{document}
\newcounter{framenum}
\forloop{framenum}{1}{\value{framenumber} < 50}{
\begin{frame}
\pifoot
\end{frame}
}
\end{document}
答案2
以下是使用 LaTeX3 宏的一种方法:
\documentclass[t]{beamer}
\usepackage{xparse}
\setbeamertemplate{navigation symbols}{}
% just add the frame numbers
\setbeamertemplate{footline}{\hfill\Large\strut\pagepi{\arabic{framenumber}}\hspace*{1pc}}
\ExplSyntaxOn
\tl_const:Nn \c_pidigits_tl {1415926535897932384626433832795028842}
\DeclareExpandableDocumentCommand{\pagepi}{m}
{
\int_compare:nTF { #1 < 2 }
{ 3 }
{
3.
\int_step_function:nnnN { 1 } { 1 } { #1-1 } \my_print_digits:n
}
}
\cs_new:Npn \my_print_digits:n #1
{
\tl_item:Nn { \c_pidigits_tl } { #1 }
}
\ExplSyntaxOff
\begin{document}
\begin{frame}
a\pause
b
\end{frame}
\begin{frame}
a\pause
b
\end{frame}
\begin{frame}
a\pause
b
\end{frame}
\end{document}
使用属性列表的不同实现;这里有 250 位数字可用,远远超过演示文稿所需的数字。
\documentclass[t]{beamer}
\usepackage{xparse}
\setbeamertemplate{navigation symbols}{}
\setbeamertemplate{footline}{\hfill\Large\strut\pagepi{\arabic{framenumber}}\hspace*{1pc}}
\ExplSyntaxOn
\tl_const:Nn \c_pidigits_tl
{3%. % source: http://www.eveandersson.com/pi/digits
1415926535897932384626433
8327950288419716939937510
5820974944592307816406286
2089986280348253421170679
8214808651328230664709384
4609550582231725359408128
4811174502841027019385211
0555964462294895493038196
4428810975665933446128475
6482337867831652712019091
}
\tl_new:N \l__pidigits_cumulate_tl
\tl_set:Nn \l__pidigits_cumulate_tl { 3. }
\prop_new:N \g_pidigits_prop
\prop_gput:Nnn \g_pidigits_prop { 1 } { 3 }
\int_step_inline:nnnn { 2 } { 1 } { \tl_count:N \c_pidigits_tl }
{
\tl_set:Nx \l__pidigits_cumulate_tl
{ \l__pidigits_cumulate_tl \tl_item:Nn \c_pidigits_tl { #1 } }
\prop_gput:NnV \g_pidigits_prop { #1 } \l__pidigits_cumulate_tl
}
\prop_show:N \g_pidigits_prop
\DeclareExpandableDocumentCommand{\pagepi}{m}
{
\prop_get:Nf \g_pidigits_prop { #1 } % #1 is \arabic{framenumber}
}
\cs_generate_variant:Nn \prop_get:Nn { Nf }
\ExplSyntaxOff
\begin{document}
\begin{frame}
a\pause
b
\end{frame}
\begin{frame}
a\pause
b
\end{frame}
\begin{frame}
a\pause
b
\end{frame}
\end{document}
答案3
无需 PSTricks。最多只能有 19 张幻灯片!
\documentclass{beamer}
\usepackage[nomessages]{fp}
\usepackage{multido}
\begin{document}
\multido{\i=0+1}{19}{%
\FPtrunc{\x}{\FPpi}{\i}%
\begin{frame}{\x}
\end{frame}}
\end{document}
答案4
使用以下方法对代码进行轻微修改:xstring
包可以解决这个问题。不过,你必须输入Pi
字符串:
\documentclass[t]{beamer}
\usepackage{xstring}
\usepackage[absolute,overlay]{textpos}
\setbeamertemplate{navigation symbols}{}
\newcounter{Pi}
\newcommand{\pifoot}{
\begin{textblock*}{120mm}(0mm,84.3mm)
\raggedleft \StrChar{3141592653589793238462643383279502884197169}{\arabic{Pi}}
\end{textblock*}
\stepcounter{Pi}
}
\begin{document}
\begin{frame}
\pifoot
\end{frame}
\begin{frame}
\pifoot
\end{frame}
\begin{frame}
\pifoot
\end{frame}
\end{document}