如何根据圆周率的增加位数对幻灯片进行编号?

如何根据圆周率的增加位数对幻灯片进行编号?

如何用 π 的位数增加来编号帧?举例来说,我希望帧编号如下

  • 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( LaTeXrequire --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}

相关内容