有没有关于 LaTeX 输出例程的良好参考?文档来源混乱且令人困惑。作者似乎对部分内容为何如此感到困惑,并想知道是否应该进行更改:
不确定这些:两个问题。必须应用于整个文档的内容应该是本地的还是全局的(它们可能应该是“仅前言”命令)?这三个是这样的吗?
到目前为止,我最喜欢的名言是下面这些。
这是一个非常紧急的行动,只是抛弃一切:先是脚注,然后是浮动。需要一个更复杂的版本;但更紧迫的是无错误的版本(例如,参见 pr/3528)。
和
我们在这里清空了所有剩余的临时插入框;这只是一个临时解决方案。也许应该将其应用于清除浮动的一页,但谁在乎呢?出于许多类似的原因,所有这些事情都需要完全重做。
我怀疑 tex.stackexchange 不是解释整个输出例程所做工作的合适场所,但我希望任何指向清晰解释的指针都能得到帮助。我特别感兴趣的是为什么浮动机制会调用输出例程(带有较大的负惩罚),有时甚至会调用多次;浮动页面是如何处理的;这些临时插入框是什么;以及类作者可以使用哪些钩子。
答案1
输出例程要么由 TeX 的正常分页机制调用,要么由在输出列表中放置惩罚 < 或 = -10000 的宏调用。这些大惩罚交流与 OTR 相同。例如,-10001 的惩罚是清除页,而 -10004 是浮点插入等等。
关于 LaTeX 输出例程的信息很难找到 —— 并且从 LaTeX 源代码中的评论猜测,即使对于 LaTeX 团队来说,它也很难理解!
输出例程是 TeX 中比较神秘的部分之一。TeXbook 中讨论输出例程的章节声称,设计输出例程可以让人达到特克斯大师。
通常情况下,掌握纯 TEX 中输出例程的概念只能勉强让您为 LaTeX 输出例程变体所带来的复杂性做好准备。但是,最好先学习 TeX 的 OTR。幸运的是,伟大的 TeX 解释者 David Salomon 撰写的一系列文章可以为您提供一些帮助。它们都可以在线作为 TUGBoat 文章找到。
先读最后一部分!
对于 LaTeX,你可以阅读 Frank Mittelbach 发表的论文xo-pfloat.pdf 在其中他解释了团队在处理输出例程时面临的一些问题。读完后你会明白浮点数仍然是难的计算机科学问题,并对微软尝试以交互方式处理多页文档感到有点同情!
David Kastrup 还发表了一篇文章高级排版任务的输出例程要求(EuroTEX 2003 会议纪要)概述了一些通用例程的难点和规范
这会给你一些背景知识,让你开始解读source2e
它本身。这并不难,但需要对标准构建块(如插入列表、here 点等)有很好的了解。
简而言之,所有浮点数都被放入盒子中,然后通过算法将其列出并取消装箱。有时令人难以置信的列表就是这样的。
\gdef\@freelist{\@elt\bx@A\@elt\bx@B\@elt\bx@C\@elt\bx@D\@elt\bx@E
\@elt\bx@F\@elt\bx@G\@elt\bx@H\@elt\bx@I\@elt\bx@J
\@elt\bx@K\@elt\bx@L\@elt\bx@M\@elt\bx@N
\@elt\bx@O\@elt\bx@P\@elt\bx@Q\@elt\bx@R}
这些盒子有时是不够的,通过阅读相关软件包的文档可以获得很大的见解,比如morefloats
,它只是使用 100 个 expandafters 向上面的列表中添加更多的盒子!
代码中有一些有用的宏 - 一种是使用列表的方式@elt
(它们相当于 Knuth 的双斜杠)。@elt 只是一个Lisp 遗迹是元素的缩写)。另请参阅@bitor
等xbitor
。
正在寻找钩子?也许你可以AtBeginDvi
以类似的方式使用bobhook
它来为页面添加水印。
最后,再提一下克鲁吉因。根据个人的解释,它们可以是一堆杂乱无章、不相配的零件,形成一个令人心烦意乱的整体或者更德国化机智或聪明,我选择后者!这是我最喜欢的引言!
该命令的星号形式专门用于 Leslie Lamport,其他的我们自己需要(FMi、CAR)。
很棒的团队,幽默感十足!迫不及待想听听这里其他成员对 LaTeX3 的看法!