TeX 相当于 #line

TeX 相当于 #line

在 C 语言中,有一个#line,它允许说明特定代码行的来源。这对于自动生成的 C 源文件很有用:生成的文件中的(不可读)代码将映射回原始源。所有后续行都将从最后一条#line指令继承文件名并推进行计数器。这是一个完全人为的例子:

源文件input.in

a <- b* c
c <- (a)

自动生成的 C 源代码input.in.c

#line 1 "input.in"
while (b) do_b();
#line 1 "input.in"
do_c();
#line 2 "input.in"
do_open_paren();
#line 2 "input.in"
do_a();
#line 2 "input.in"
do_close_paren();

TeX 中是否有类似的东西?要怎么做才能让 TeX 认为它位于特定源文件的特定行中,并从下一行的开头开始生效?

本练习的目的是让 SyncTeX 引用原始文件而不是自动生成的代码。自动生成的 TeX 文件会在以下情况下出现:针织R,如果你自动将 \input{fileX} 替换为 fileX 的内容当然,代码生成器必须将#line等效内容发出到生成的代码中。

答案1

TeX 有一个内部寄存器\inputlineno用于跟踪行号。

aaaa \the\inputlineno

aaaa \the\inputlineno

\newcount \inputlineno  \inputlineno=3 xaaaa \the\inputlineno

如上所示,您无法为其分配,但可以使用同名的计数寄存器对其进行屏蔽。我不知道 synctex,但如果它从 csname 中获取值,\inputlineno 而不是直接访问原语,那么如果在生成的文件的每个部分中,您为屏蔽的副本分配一个值,这可能就足够了\inputlineno

相关内容