synctex 如何工作?

synctex 如何工作?

直到今天我才决定查看一个文件的内容.synctex,然后我看到了很多包含包路径等等的行。

但在下面几行中我可以看到很多数字,我猜可能是坐标。

例如,

Output:pdf
Magnification:1000
Unit:1
X Offset:0
Y Offset:0
Content:
!15728
{1
[192,56:4736286,51753031:28827951,47016745,0
h192,56:4736286,4736286:0,0,0
h192,56:4736286,4736286:0,0,0
[192,56:4736286,4736286:0,0,0
(192,56:4736286,4155173:0,0,0
k192,56:4736286,4155173:-791972
)
]
[192,56:4736286,51753031:28827951,47016745,0
[192,56:5594039,51753031:27970198,47532077,0
[192,56:5594039,5007386:27970198,786432,0
(192,56:5594039,5007386:27970198,0,0
h192,56:5594039,5007386:27970198,0,0
)
]

最后我发现

Input:210:/media/./main.aux
!72
Postamble:
Count:53291
!27
Post scriptum:

那么,我们有可能知道它是如何工作的吗?这些线和数字是什么意思?

答案1

首先:最重要的(但不幸的是有点过时)参考资料是SyncTeX 手册页其中包含描述 SyncTeX 行的语法。

接下来是一些最重要的概念。 synctex 文件由几个不同的部分组成(每个部分name:在 synctex 文件中都标有):

  • 前言:本节描述 synctex 版本、输出格式、放大倍数、单位和偏移量。
  • 内容:这是相关部分。内容部分包含表格和表单(后面有说明)。在这里,您可以找到有关由 TeX 排版的水平和垂直框以及粘合等的信息。
  • 后记:此部分包含计数(同步记录数)以及字节偏移量。后记关闭文件。摘自手册页:

    如果没有后记,则表明排版过程未正确结束。

  • 后记:此部分大部分为空。它适用于第三方材料并允许进一步转换(移动、放大)。如果您要进一步处理 DVI 到 PDF 以影响同步,那么这可能很重要。此处提供的设置将覆盖前言中的值。

由于前言、后记和附言很少是您想要检查的内容,因此我将重点关注内容。

我们先介绍几条“线”:

  • 以 开头的每一行Input:TAG:FILENAME都是源的更改。因此,之后所有引用都将指向此处给出的文件名。您的示例中缺少这样一行。
  • 每一行以 开头!NUMBER是一个字节偏移记录,即到文件开头的字节距离。
  • 每行以 开头{TAG都是一个 sheet(基本上是一页)的开头,而这个 sheet(基本上是一页)显然是以 结尾的}。同样,还有<TAG一个以 开头的 form(PDF form,但你不会在普通的文档中看到它)以 结尾的>

synctex指TAG的是该对象的唯一标识符。您会注意到这些将是无符号整数。例如,在您的示例中{1

您可以拥有任意数量的工作表或表单。每个工作表或表单(以及它们的末尾)前面都会有一个字节偏移记录。工作表(或表单)可能包含垂直框和水平框。

一个 vbox 以 开始[LINK:POINT:SIZE,以 结束]。类似地,一个 hbox 以 开始(LINK:POINT:SIZE,以 结束)。在这些括号内,有不同的框类型,例如其他 vbox/hbox、void hbox/vbox(无内容,只有大小,行以hLINK:POINT:SIZE或为前缀vLINK:POINT:SIZE)、glue、kern、math 和 form ref 记录,甚至完整表单。

LINK部分非常重要,因为它包含TAG,LINE(和可选的,COLUMN)。点表示框的位置(X,Y)和大小WIDTH,HEIGHT,DEPTH。因此取直线

[192,56:4736286,51753031:28827951,47016745,0

从您的示例中,我们注意到这是标记在行192处的未指定列的vbox 的开头56。它具有 x 值4736286和 y 值51753031、宽度为28827951、高度为47016745和深度为0。数字似乎很大,但通常会给出,sp因此可以理解。

正如已经描述的,您的示例中还有一些略有不同的行:

  • h192,56:5594039,5007386:27970198,0,0表示空的水平框,即没有相关内容可参考但阻挡输出空间的水平框。
  • k192,56:4736286,4155173:-791972是一个描述的字距记录LINK:POINT:WIDTH,因此这是一个宽度的字距-791972

还有许多其他记录类型可以检查,但请参阅手册页以获得一般概述。如前所述,我得出的结论是,在某些时候,手册页与 synctex 程序的实际输出不同步。但无论如何,这是一个很好的开始。

请注意,目前只有一个真正的 synctex 库,即参考实现。因此,如果您有任何深入的问题,您将不得不查看源代码。请注意,手册页指出(关于文件结构):

该文件的结构不应被视为公开的,即除了synctex命令行实用程序和synctex_parser库之外,任何人都不需要解析其内容。除非绝对无法避免,否则synctex只能通过向synctex命令行实用程序发出请求来访问文件的内容。

相关内容