如何使用 LaTeX 排版十倍幂(幂之塔)?

如何使用 LaTeX 排版十倍幂(幂之塔)?

我该如何写x^x^x^x^x^x^x^x^x^x

我的 LaTeX 发行版不想吃它,它在双倍功率 x^x^x 时停止吞食东西。我的目标是从本质上用堆叠在一起的 X 构建一个望远镜。别问,这是我的幽默感。

答案1

\documentclass{article}

\def\powertower#1#2{#1\ifnum#2>1 ^{\powertower{#1}{\numexpr#2-1\relax}}\fi}

\begin{document}

$\powertower{x}{100}$

\end{document}

enter image description here

答案2

\documentclass[12pt]{article}
\begin{document}

\[ x^{x^{x^{x^{x^{x^{x^{x^{x^x}}}}}}}} \]

\end{document}

enter image description here

答案3

我将这段代码献给 Sean。:)

长命expl3:)

\documentclass{article}

\usepackage{expl3}
\usepackage{xparse}

\ExplSyntaxOn

\cs_new:Npn \paulo_epicrecursion:nn #1 #2 {
   #1^{ \int_compare:nTF { #2 > 1 } { 
      \paulo_epicrecursion:nn { #1 } { \int_eval:n { #2 - 1 } }
   } {
     #1
   } }
}

\NewDocumentCommand{ \powertower } { m m } {
    \paulo_epicrecursion:nn { #1 } { #2 }
}

\ExplSyntaxOff

\begin{document}

$\powertower{x}{10}$

\end{document}

输出:

Quack

更新:egreg 精辟地指出,上述代码生成了一长串嵌套\int_eval:n调用。优化如下:

\documentclass{article}

\usepackage{xparse}

\ExplSyntaxOn

\cs_new:Npn \paulo_epicrecursion:nn #1 #2
  {
   #1^{
     \int_compare:nTF { #2 > 1 }
      { \paulo_epicrecursion:nx { #1 } { \int_eval:n { #2 - 1 } } }
      { #1 }
   }
 }

\NewDocumentCommand{ \powertower } { m m }
 {
  \paulo_epicrecursion:nn { #1 } { #2 }
 }
\cs_generate_variant:Nn \paulo_epicrecursion:nn { nx }

\ExplSyntaxOff

\begin{document}

$\powertower{x}{10}$

\end{document}

这里的技巧是生成的变体。正如 egreg 所解释的,第一个调用不需要完全展开,但递归调用需要。

答案4

怎么?害怕超越255?我才不怕呢!

epictower1

这是获得的$\epictower{x}{600}$

这复现了确切地本来会做什么TeX(如果不是因为 255 个组级别的限制)包括TeX在右侧考虑额外水平空间的一个相当奇怪的特征。

2015 年更新。我忘了在 2013 年说过我指的是什么:水平空白延伸到电力塔的右侧,在字符字形的侧面。带有 600 x 的图像没有显示由此产生的(大)额外水平空间,因为图形被剪裁到包含的墨水中。下面带有较短楼梯的图像使用 fbox 显示额外的空白,查看最右侧字符的右侧到 fbox 框架的距离。您还可以在 fbox 内尝试 David Carlisle 的宏(使用 \fboxsep=0pt或更确切地说-0.4pt)。

epictower2

在下图中,左上角是生成的\epictower,右下角是原始内容,以证明水平和垂直放置是正确的(字体大小设置60pt为标准大小)。

epictowerx

epictower3 epictowersmallx epictowersmallX

代码如下:

\documentclass{article}
% use this for 600 x's!
% \usepackage [paperheight=65cm,paperwidth=100cm]{geometry}
\usepackage {geometry}
\pagestyle{empty}

\makeatletter
\newdimen \epic@x
\newdimen \epic@y
\newdimen \epic@extrax
\newdimen \epic@extray
\newbox \epic@one
\newbox \epic@two
\newcommand{\epictower}[2]{\ifcase #2\relax
         1\or #1\or {#1}^{#1}\or {#1}^{{#1}^{#1}}\else \epic@tower {#1}{#2}\fi }
\def\epic@tower #1#2{%
    \sbox\epic@one{\m@th $\scriptscriptstyle #1$}%
    \sbox\epic@two{\m@th $\scriptscriptstyle {#1}^{#1}$}%
    \epic@x=\wd\epic@one 
    \epic@extrax=\wd\epic@two
    \advance\epic@extrax by -\epic@x
    \advance\epic@extrax by -\epic@x
    \epic@y=\ht\epic@two
    \advance\epic@y by -\ht\epic@one
    \epic@extray=\ht\epic@one
    \advance\epic@extray by -\epic@y
    \toks@ \expandafter{\the\numexpr #2-3}%
    {#1}^{{#1}^{%
    \setlength{\unitlength}{1sp}%
    \begin{picture}({\numexpr (#2-2)*\epic@x+(#2-3)*\epic@extrax\relax},%
                    {\numexpr (#2-2)*\epic@y+\epic@extray\relax})
    \count@\z@
    \loop
        \put (\numexpr \count@ * \epic@x\relax,%
              \numexpr \count@ * \epic@y\relax){\copy\epic@one}%
    \ifnum\the\toks@>\count@
    \advance\count@ \@ne
    \repeat
    \end{picture}}}}
\makeatother


\begin{document}\thispagestyle{empty}

\fboxsep-.4pt
\fontsize{60}{60}

\newcommand{\testtexpowers}[1]{%
\setbox 1 \hbox{$\scriptscriptstyle #1$}%
\setbox 2 \hbox{$\scriptscriptstyle #1^{\fbox{\copy1}}$}%
\setbox 3 \hbox{$\scriptscriptstyle #1^{#1^{\fbox{\copy1}}}$}%
\setbox 4 \hbox{$\scriptscriptstyle #1^{#1^{#1^{\fbox{\copy1}}}}$}%
\setbox 5 \hbox{$\scriptscriptstyle #1^{#1^{#1^{#1^{\fbox{\copy1}}}}}$}%
\setbox 6 \hbox{$\scriptscriptstyle #1^{#1^{#1^{#1^{#1^{\fbox{\copy1}}}}}}$}%
\setbox 7 \hbox{$\scriptscriptstyle #1^{#1^{#1^{#1^{#1^{#1^{\fbox{\copy1}}}}}}}$}%
\setbox 8 \hbox{$\scriptscriptstyle #1^{#1^{#1^{#1^{#1^{#1^{#1^{\fbox{\copy1}}}}}}}}$}%
\setbox 9 \hbox{$\scriptscriptstyle #1^{#1^{#1^{#1^{#1^{#1^{#1^{#1^{\fbox{\copy1}}}}}}}}}$}%
\leavevmode\rlap{\rlap{\rlap{\rlap{\rlap{\rlap{\rlap{\rlap{\fbox{\box1}}\fbox{\box2}}\fbox{\box3}}\fbox{\box4}}\fbox{\box5}}\fbox{\box6}}\fbox{\box7}}\fbox{\box8}}\fbox{\box9}}

\testtexpowers{x}

\testtexpowers{X}

\testtexpowers{xX}

\clearpage

\fbox{$\epictower {x}{1}$}\fbox{$x$}\hrule\fbox{$x$}
\hrule
\fbox{$\epictower {x}{2}$}\fbox{$x^x$}\hrule\fbox{$x^x$}
\hrule
\fbox{$\epictower {x}{3}$}\fbox{$x^{x^x}$}\hrule\fbox{$x^{x^x}$}
\hrule
\fbox{$\epictower {x}{4}$}\fbox{$x^{x^{x^x}}$}\hrule\fbox{$x^{x^{x^x}}$}
\hrule
\fbox{$\epictower {x}{5}$}\fbox{$x^{x^{x^{x^x}}}$}\hrule\fbox{$x^{x^{x^{x^x}}}$}
\hrule
\fbox{$\epictower {x}{6}$}\fbox{$x^{x^{x^{x^{x^x}}}}$}\hrule\fbox{$x^{x^{x^{x^{x^x}}}}$}
\hrule



\clearpage

\fbox{$\epictower {X}{1}$}\fbox{$X$}\hrule\fbox{$X$}
\hrule
\fbox{$\epictower {X}{2}$}\fbox{$X^X$}\hrule\fbox{$X^X$}
\hrule
\fbox{$\epictower {X}{3}$}\fbox{$X^{X^X}$}\hrule\fbox{$X^{X^X}$}
\hrule
\fbox{$\epictower {X}{4}$}\fbox{$X^{X^{X^X}}$}\hrule\fbox{$X^{X^{X^X}}$}
\hrule
\fbox{$\epictower {X}{5}$}\fbox{$X^{X^{X^{X^X}}}$}\hrule\fbox{$X^{X^{X^{X^X}}}$}
\hrule
\fbox{$\epictower {X}{6}$}\fbox{$X^{X^{X^{X^{X^X}}}}$}\hrule\fbox{$X^{X^{X^{X^{X^X}}}}$}
\hrule

\end{document}

% comment-out the preceding, sets page dimensions in geometry
% only limited by TeX's \maxdimen !

$\epictower{x}{600}$

\end{document}

相关内容