近年来有没有非 WEB 的 TeX Core 重新实现?

近年来有没有非 WEB 的 TeX Core 重新实现?

我正在寻找近年来 TeX 核心算法(Knuth 于 1982 年左右编写)的重新实现。

在我看来,LaTeX、XeTeX、LuaTeX 都调用 TeX 核心,而 TeX 核心是用古雅的 Pascal-WEB 编写的。它们通过自动化工具将 WEB 程序转换为 Pascal 或 C,对吗?似乎没有用更现代的语言对 TeX 核心进行新的重写。

相关问题:TeX 的更多现代重新实现但那已经是 8 年前的事了。如果在这十年里,有任何新的彻底重写的项目,我都会非常愿意去研究代码。

  1. 据我了解,LuaTeX部分重写TeX 核心在 CWEB 中,对吧?

  2. 除了 LuaTeX,有没有完全(或几乎完全)重新实现整个 TeX 核心算法,并且不使用 WEB 的?例如,有一个人据说在 Clojure 中实现了 TeX 核心算法,但我在 GitHub 上找不到它的任何踪迹。此外,还有一个其中说作者在 SML 中实现了 TeX 核心算法,但那是很久以前的事了,而且源代码似乎没有公开。

由于我引用了新材料,所以我认为这不算重复。当然,如果任何陈述有误或任何链接有误,请纠正我。

答案1

我正在尝试收集 TeX 实现的列表这里。以下是我所知道的。

  • 首先,LuaTeX 是 TeX 的一个完整且功能齐全的扩展,目前被广泛使用,并且正在积极开发中(至少直到最近)。它没有任何 WEB 代码:代码很久以前就被手动翻译成 C 语言(而不是像 pdfTeX/XeTeX 构建过程内部那样自动翻译成丑陋的代码)。请参阅文章LuaTEX 与 Pascal 告别(MAPS 39,EuroTeX 2009)提供了详细信息。作为运行示例,我将使用scan_left_brace文章中的示例:请参阅 LuaTeX 源代码中的相应代码,目前这里.(在一些地方我看到提到了 CWEB,但我不知道为什么;这只是带有注释的 C 代码。)

  • 如果你唯一的问题是 Pascal,那么还有 Martin Ruckert 的 web2w 项目(网页TUGboat 文章), 哪个确实翻译成了 CWEB(使用自动化工具,但关心生成输出的可读性)。基于这个翻译的代码,Ruckert 教授成功开发了一个电子书阅读器应用程序(暗示) 包括他在 TUG 2019 上展示的第二个版本。排版的 CWEB 列表中的相应部分如下所示:

    web2w ctex

    从源生成.w,如下所示:

    @* Basic scanning subroutines.
    Let's turn now to some procedures that \TeX\ calls upon frequently to digest
    certain kinds of patterns in the input. Most of these are quite simple;
    some are quite elaborate. Almost all of the routines call |get_x_token|,
    which can cause them to be invoked recursively.
    @^stomach@>
    @^recursion@>
    
    @ The |scan_left_brace| routine is called when a left brace is supposed to be
    the next non-blank token. (The term ``left brace'' means, more precisely,
    a character whose catcode is |left_brace|.) \TeX\ allows \.{\\relax} to
    appear before the |left_brace|.
    
    @p void scan_left_brace(void) /*reads a mandatory |left_brace|*/ 
    {@+@<Get the next non-blank non-relax non-call token@>;
    if (cur_cmd!=left_brace) 
      {@+print_err("Missing { inserted");
    @.Missing \{ inserted@>
      help4("A left brace was mandatory here, so I've put one in.")@/
        ("You might want to delete and/or insert some corrections")@/
        ("so that I will find a matching right brace soon.")@/
        ("(If you're confused by all this, try typing `I}' now.)");
      back_error();cur_tok=left_brace_token+'{';cur_cmd=left_brace;
      cur_chr='{';incr(align_state);
      } 
    } 
    
  • 如果 Pascal 和 web/cweb 风格的文学编程都有问题,那么还有 rsTeX(我最喜欢的阅读语言,可能是因为我有小部分在其在线可用时发挥作用)。这是将 WEB 代码手动翻译成(最小)C++(参见文件顶部的注释),以及相应的scan_left_brace这里

  • 如果您想了解更多深奥的知识,那么有很多过时/不完整的实现,它们的完整性和与当今编译器的兼容性各不相同。其中许多似乎源自 Pat Monardo 在 1980 年代末/1990 年代初进行的手动翻译,称为 CommonTeX。请参阅不同存储库中的相应代码部分这里 (CommonTeX)这里 (VorTeX)(见 Pehong Chen 的论文),这里 (cpptex)这里 (tex++),还有一些似乎不是(NTS 和 ExTeX 用 Ja​​va 编写,等等)。请参阅 GitHub 上的相应描述。还列出了一些部分重新实现。

  • 正如 Barbara Beeton 在评论中提到的,Doug McKenna 的“JSBox”(其中的“JS”不是“JavaScript”而是“Johann Sebastian”)据说是对 TeX 的完全重写,并通过了 Trip 测试。在 TUG 2019 上,他展示了令人印象深刻的电子书/应用程序其中包括使用 TeX 排版某些交互式图形周围的所有文本。源代码尚未提供。TUG 2019 没有视频录制,但有两段 TUG 2014 的视频可供观看这里这里,以及TUGboat 文章

  • 如果您知道任何其他信息,请告诉我。

相关内容