一页上会有多少文字?

一页上会有多少文字?

- -编辑:

回应 David Carlisle 的回答,这里是问题发生的实际场景。

我有两本用两种语言编写的圣经文本。比如说英语和西班牙语。并行呈现文本的基本思想已在以下问题中得到解决。同步双语页面上的文本 剩下的问题是我需要让每页的经文都同步。目前提出的解决方案很快就会不同步。例如,英文版和西班牙文版的《创世纪》第 20 章第 5 节位于同一页上。

因此,我考虑在\pdfsavepos诗句末尾添加一个,并将其转储到辅助文件中。这将生成一个辅助文件,其中的诗句如下:

book01chapter01verse001=10000ypos
book01chapter01verse002=15000ypos
book01chapter01verse003=20000ypos

然后出现分页符:

book01chapter01verse009=50000ypos
book01chapter01verse010=10000ypos

但是因为我想在每一页上都显示完整的诗句,所以我必须\newpage对每一页都执行“如果 yposCurrent > yposNext,则在当前诗句之前插入”。然后事情就变得很混乱,因为需要更新辅助文件以显示这一诗句和后续诗句。然后需要再次运行编译器。而且它很可能会在下一页上找到相同的情况。

因此,我可能最终需要运行大约一千次编译器才能生成 PDF。

---原帖:

在我过去的许多项目中都出现过这个问题。我如何才能知道 LaTeX 将在当前页面上放置多少实际文本?

LaTeX 显然有一种数学方法来计算和分配文本中涉及的字母/单词(框)。使用它来计算在页面上放置多少并将其展开以使其对齐等。

因此,当第 1 页完成后,它知道第 2 页从原文的哪里开始,当第 3 页完成后,它知道第 4 页从原文的哪里开始,依此类推。因此,它不仅计算这些参数,而且还跟踪这些参数。

现在,我想知道是否有可能掌握这些参数,以便能够通过 LaTeX 解析我的文本,并将这些数据存储在一个变量中,该变量将决定我的文本将被分解的位置?(顺便说一下,无需侵入 TeX 并重写它的部分内容......)

之前建议的解决方案提到将某些“里程碑/航点”写入辅助“日志”文件,该文件可在下次运行时用于调整文本,但该解决方案不能完全解决我的问题。由于我使用的源文本非常大,如果您通过日志文件进行操作,则每次调整任何页面上的任何文本时都需要进行一次编译运行。如果后续页面需要调整,则需要对该页面进行另一次编译运行,同时将新的“里程碑”写入日志文件,这又需要另一次运行来处理和调整后续文本。因此,对于我那本超过一千页的书,我将整天坐着编译它。然后,如果我需要回到第 23 页来修复文本中的小错误,我可能最终不得不重新编译整个内容大约 900 次。

因此据我所知,我需要包含分页符数据的变量,并且能够在一次编译运行。这样我就可以手动对我的文本进行必要的调整,然后让 LaTeX 将其放置在正确的位置。

有点像一个巨大的 FOR 循环处理变量中的文本......

总之:这个问题对你来说可能看起来有点模糊,但我实际上只需要弄清楚在一页上会放置多少 TeX,仅此而已。

答案1

TeX 中的换行和分页以两个异步方式进行,并且分页器不会向换行器反馈任何信息。(我在这个答案中忽略了 luatex,因为它会使我说的有些话出错)。因此,从概念上讲,文档输入在每个段落末尾被分解并放置在无限滚动中,然后不时调用输出例程,该例程会切断足够的滚动部分以组成一页,添加浮动图形页眉和页脚等。这里要注意的是,下一页(或多页)的大部分内容都有已经此时已经设定。

基本上这个假设是不正确的:

因此,当第 1 页完成后,它知道第 2 页从原文的哪里开始,当第 3 页完成后,它知道第 4 页从原文的哪里开始,依此类推。因此,它不仅计算这些参数,而且还跟踪这些参数。

在分页时,TeX 只看到一个垂直的框列表,它不了解这些框与原始源的关系。

如果您可以编辑您的问题,使其更具体说明您需要传递给每个页面的具体信息,我们可能会提供帮助。经典技术(例如,正如\mark您提到的,写入辅助文件)可以提供帮助,\pdfsavepos在这种情况下也非常有用。或者,如果 luatex 是一种选择,lua 回调提供的控制/信息比传统 TeX 中提供的要多得多。

相关内容