我的问题是如何在休闲活动的同时延长编译时间?。
我想使连续的编译更长,例如:
\newif\ifpaid
\everypar{\ifpaid{}\else {slowing down action dependent on a value written into external file} \fi}
\ifpaidfalse
\ifpaid{}\else{increase the value making the code slow}\fi
当然,代码的这一部分对于新手来说应该是比较隐藏的。
从 \if-conditional 的名称可以看出这种代码的用途。
编辑:我已经提出了标准的 TeX/LaTeX 解决方案,但也欢迎任何其他技巧。
答案1
你必须像处理计算机病毒一样,让用户一开始就自愿参与到剧情中。对于病毒来说,这是通过让用户点击某些东西来实现的,希望这是有益的东西。对于 LaTeX 来说,这意味着让用户包含一个他被告知是有益的文件(或样式)
说实话,虽然我根据之前的回答编写了代码,提取 LaTex 文档的结构,包括注释,我不太明白计数器Delay
是如何工作的(每次编译时它都会增加 5,可能是多次传递的结果\@starttoc
??)。但它确实有效。
这是与逻辑相关的 innocuous.tex \@starttoc
(已编辑以减少非必要代码,并且不再需要调用来\tableofcontents
操作)
\usepackage{pgffor}
\newcounter{Delay}
\newcommand\delay[1]{%
\setcounter{Delay}{#1}%
\foreach\i in{1,...,#1}{%
\i, % REPLACE THIS LINE WITH SOMETHING THAT SQUANDERS A SHORT AMOUNT OF TIME
}%
\stepcounter{Delay}%
}
\makeatletter
\AtBeginDocument{\@starttoc{xyz}}
\makeatother
\AtEndDocument{\addtocontents{xyz}{\protect \delay{\theDelay}}}
然后,只要您让用户访问\input
该文件:
\documentclass{article}
\input{innocuous}
\begin{document}
Testing
\end{document}
每次编译时,它都会增加调用的循环次数\delay
。在这里,我只打印出循环索引来演示,但您可能希望用一些[非打印]来替换这一行,这会占用少量(但不是无限小)的时间。
每次连续编译的循环计数\delay
为,5i-2
其中 i 是编译次数。该方法通过创建一个.xyz
包含以下行的文件来运行
\delay{69}
其中,每次编译时,索引都会增加。当代码被编译时,它将执行 69 个延迟循环,然后将索引增加 5。
答案2
文档:
\documentclass{article}
\usepackage{infinitywait}
\begin{document}
Hello world
\end{document}
包裹infinitywait.sty
:
\ProvidesPackage{infinitywait}
[2017/09/29 v0.9 how to occupy the wait for Infinity War release (JFB)]
\def\infinitywait@N{1000000}
\AtEndDocument{%
\immediate\write\@mainaux{%
\gdef\string\infinitywait@N{\the\numexpr2*\infinitywait@N}}%
\count@ \infinitywait@N\relax
\loop
\advance\count@\m@ne
\ifnum\count@>\z@
\repeat
}
\endinput
更好infinitywait.sty
。在切换到这个之前最好先清理掉前一个的辅助文件……
\ProvidesPackage{infinitywait}
[2017/09/29 v0.99 how to occupy the wait for Infinity War release (JFB)]
\def\infinitywait@N{1000}
\AtEndDocument{%
\immediate\write\@mainaux{%
\gdef\string\infinitywait@N{\the\numexpr1000+\infinitywait@N}%
}%
\count@ \infinitywait@N\relax
\loop
{\count@\infinitywait@N\relax
\loop
\advance\count@\m@ne
\ifnum\count@>\z@
\repeat}%
\advance\count@\m@ne
\ifnum\count@>\z@
\repeat
}
\endinput