编辑

编辑

澄清:问题可能与...相关奎因有趣的问题,但恕我直言,这是非常独特的。

这里的问题是,用 TeX 编写一个“衔尾蛇”,即一个包含自身作为图形的文件。换句话说,输出应该包含一个呈现该图形的图形。从某种意义上说,这就像一个分形,因为该图形将显示整个文档,希望只有一页。现在,在这个图中,您将看到输出的缩小图像,其中有一个图形。

换句话说,“衔尾蛇”不是“奎因”,而是类似的东西这个图片

在此处输入图片描述

或者这个:

这个

以下是我尝试做的:

\documentclass[twocolumn,10pt]{article}
\usepackage{pdfpages}
\usepackage{lipsum}
\title{The Ouroboros}
\author{U. Roboros}
\begin{document}
  \maketitle
  \lipsum[1]
  \par
  \begin{figure}
    \includepdf[frame,scale=0.4]{ouroboros.pdf} %
    \end{figure}
  \par
  \lipsum[3]
  \par
  \lipsum[2]
\end{document}

这个想法是,每次通过 LaTeX 运行文件时,它都会显示一个图像,该图像在下一次运行中以图形形式包含在内。

这可以被认为是一种有趣的练习,但在编写 TeX 文件文档时,解决方案可能会很有用;这个想法是你生成一个 LaTeX 文件,例如,使用bashful,编译它,然后将其作为图形包含在内。

上述解决方案行不通,因为运行 latex 时,之前的 PDF 文件会被删除。也许解决方案是有两个文件,每个文件都包含另一个文件。另一个选项是将输入复制到临时文件中,编译它,然后包含它。

上述的另一个问题是,至少对我来说,pdfpags 似乎与图形环境冲突。

请注意,自我复制的 (La)TeX 文档 做类似的事情,让文件在某种意义上包含自身。在这里,这应该在渲染级别完成,而不是在文本基础上完成。

答案1

编辑

...包括一个更险恶的版本...

一个文件统治一切...

我不确定这是否是您想要的。严格来说,这个文件不包含其自身。它包含其自己的输出。这是您的图像暗示您想要的,但您的描述含糊不清。

无论如何,既然您提到将其与 一起使用bashful,我想我也可以使用bashful。出于显而易见的原因,这需要使用 shell escape 进行编译。但是,如果您使用的是bashful,那么您显然必须以需要的方式进行编译bashful,因此无论如何都会使用 shell escape。

一个简单的例子:

\documentclass{article}
\usepackage{graphicx,bashful}
\pagestyle{empty}
\begin{document}

\bash
[[ -f "prawf3.pdf" ]] && mv -f prawf3.pdf ouroboros.pdf
\END

\centering This Is The File To End All Files

\IfFileExists{ouroboros.pdf}{\frame{\includegraphics[width=.9\textwidth]{ouroboros}}}{\relax}

\end{document}

使用 TiKZ 的一个更险恶的例子:

\documentclass[a4paper]{article}
\usepackage{tikz,graphicx,bashful}
\usepackage[scale=.95]{geometry}
\usetikzlibrary{decorations.text,calc}
\pagestyle{empty}
\begin{document}
\bash
[[ -f "prawf3.pdf" ]] && mv -f prawf3.pdf ouroboros.pdf
\END
\noindent
\centering
\vfill
\begin{tikzpicture}
  \path (.05\textwidth,.05\textheight) coordinate (o) rectangle +(.95\textwidth,.95\textheight) coordinate (f);
  \node [outer sep=0pt, inner sep=0pt, anchor=center] at (current page.center) {%
    \IfFileExists{ouroboros.pdf}{%
      \includegraphics[scale=.9]{ouroboros}%
    }{}};
  \path [decorate, decoration={text effects along path, text={One File To Rule Them All\dots }, text effects/.cd, repeat text, characters={text along path, anchor=center}}] (o |- f) [out=0, in=180] to (f) [out=-90, in=90] to (o -| f) [out=-180, in=0] to (o) [out=90, in=-90] to cycle;
\end{tikzpicture}
\vfill
\clearpage
\end{document}

答案2

这是一个可能的开始:(代码在编辑中精简)

这个想法是使用 TeX 的盒子模型。\vbox我们在 中构建页面。然后,\vbox它自己包含一个.7带有\scalebox包 的扩展\graphicx。盒子包含一个hyperref链接,以及所有缩小的副本,直到最小的作品。

\documentclass[a4paper]{article}
\usepackage[margin=0pt]{geometry}
\usepackage{graphicx}
\usepackage{picture}
\usepackage{hyperref}% tous les liens marchent même le plus petit!
\usepackage{url}
\parindent0pt
\topskip0pt
\parskip0pt
\newbox\ouroboros
\begin{document}

\setbox\ouroboros 
\vbox{\hsize\dimexpr\paperwidth-1cm\relax
\begin{picture}(\paperwidth-1cm,\paperheight-1cm)
\put(0,0){\framebox(\paperwidth-1cm,\paperheight-1cm){}}
\end{picture}}


% Loop
\count255 15
\loop
\setbox\ouroboros
\vbox{\hsize\dimexpr\paperwidth-1cm\relax
\begin{picture}(\paperwidth-1cm,\paperheight-1cm)
% frame
\put(0,0){\framebox(\paperwidth-1cm,\paperheight-1cm){}}% or \dashbox
% top
\put(0,.85\paperheight){\makebox(\paperwidth-1cm,3cm){\huge\bfseries  HERE IS
    THE SOLUTION TO ALL MYSTERIES:}}
\put(.5\paperwidth-.5cm,.85\paperheight){\makebox(0,0){\parbox{.9\paperwidth}
{The ouroboros often symbolizes self-reflexivity or cyclicality, especially in
the sense of something constantly re-creating itself, the eternal return, and
other things such as the phoenix which operate in cycles that begin anew as
soon as they end.}}}
% SELF INCLUSION:
\put(.5\paperwidth-.5cm,.5\paperheight-.5cm){\makebox(0,0){\scalebox{.7}{\box\ouroboros}}}
% bottom
\put(.5\paperwidth-.5cm,.1\paperheight){\makebox(0,0){\parbox{.9\paperwidth}
{It can also represent the idea of primordial unity related to something
existing in or persisting from the beginning with such force or qualities it
cannot be extinguished. While first emerging in Ancient Egypt, the ouroboros
has been important in religious and mythological symbolism, but has also been
frequently used in alchemical illustrations, where it symbolizes the circular
nature of the alchemist's opus. It is also often associated with Gnosticism,
and Hermeticism.

\url{http://en.wikipedia.org/wiki/Ouroboros}}}}
\end{picture}}
\ifnum\count255 > 1
\advance\count255 - 1
\repeat

\hrule height 0pt
\kern0.5cm
\noindent\kern.5cm\box\ouroboros
\end{document}

衔尾蛇

并进行 15 次迭代:

衔尾蛇15

答案3

向 David Gilmour 致歉

\documentclass[tikz,border=4mm]{standalone}
\begin{document}
\def\dsotm{\node[scale around={\x:(0,-1)},
                 draw=white,ultra thin] 
                 at(0,0){\includegraphics[height=4cm]{dsotm}};}
\tikz{\foreach\x in{2,1.75,...,0.25}{\dsotm}}
\end{document}

在此处输入图片描述

答案4

我认为,到目前为止给出的所有答案——虽然它们本身都是勇敢而巧妙的努力——都未能满足问题标题中明确规定的要求:文档应该包括自身无限递归

这样做有一个明显的问题:一旦文档包含单个元素,比如字母“x”,它就必须包含无限多个“x”。因此,文档处理需要很长时间,它会生成一个无限大的 pdf 文件,并且渲染此文件永远无法完成。

我相信我已经找到了解决这个问题的可行方法:

\documentclass{article}
\pagestyle{empty}
\begin{document}
~
\end{document}

渲染结果为

批评者可能会指出,我的代码实际上什么都没有包含,这似乎违反了文档“包含自身”的要求。但是,由于文档中什么都没有,所以什么都不包含是正确的做法。

相关内容