NTS(新排版系统)(TeX 的 Java 实现)现在可以使用吗?

NTS(新排版系统)(TeX 的 Java 实现)现在可以使用吗?

我读到的是NTS(新排版系统)是一个用 Java 重新实现 TeX 的项目。根据当前版本在 Wikipedia 文章中,它被寄予厚望(并有足够的资金),例如希望更容易扩展,但最终它被放弃了,因为:

  1. 太慢了,
  2. 那时已经有了 e-TeX 和 pdfTeX 扩展,而该程序仅实现了核心“Knuth”TeX,而没有这些扩展。

不过,至少在实现核心 TeX 方面,它似乎已经达到了相当的完成度:据说它甚至通过了 TRIP 测试(TeX 程序需要通过的“折磨测试”,才能被称为 TeX)。

但那是在 2000 年。17 年后的今天,计算机速度更快了,可能 2000 年认为太慢的东西现在也可以接受(即使比“常规”TeX 慢很多倍)。因此问题是:nts今天是否可以使用它编译纯 TeX(仅因为 LaTeX 需要 e-TeX 扩展)文档?看到 Java 程序执行 WEB-b-Pascal 转换为 C 程序所做的事情,可能会引起一些兴趣,或者至少是好奇。

答案1

(回答我自己的问题以保留这些信息,但仍然欢迎更好的答案......)

kpsewhich是的,如果您拥有 TeX 生态系统的一些基本二进制文件(如) ,以及某些“数据”(如、字体和其他文件),则可以使用 NTS plain.tex。您可以通过安装 TeX Live(或类似系统)获得这些。

以下是似乎有效的步骤(在 Mac 和 Linux 上测试过)。

  1. 先决条件:确保kpsewhichjava命令存在且有效。您可以通过安装 TeX Live 来执行前者(如果您已经有可用的 TeX 系统,请跳过此步骤)。例如在 Ubuntu 上:

    $ sudo apt install texlive-binaries
    $ sudo apt install default-jre
    
  2. 获取 NTS 源并解压缩:

    $ mkdir nts && cd nts
    $ wget http://mirrors.ctan.org/systems/nts/ntsbase-1.0-beta.zip
    $ unzip ntsbase-1.0-beta.zip
    
  3. 使其中一个nts脚本可执行(我认为哪个脚本并不重要),然后可以选择尝试运行它:

    $ chmod +x ./bin/i386-linux/nts
    $ ./bin/i386-linux/nts
    nts: NTS Java Executable nts.rt.jar or Nts.class not found.
    
  4. 移动到包含该文件的目录.jar

    $ cd texmf/nts/base
    
  5. 可选:尝试运行它:

    $ ../../../bin/i386-linux/nts 
    nts: Can't find requested NTS .nfmt file >nts<.
    
  6. 转储格式文件:

    $ ../../../bin/i386-linux/nts -ini plain '\dump'
    This is NTS, Version 1.00-beta
    NTS comes with ABSOLUTELY NO WARRANTY.
    This is free software, and you are welcome to redistribute
    it under certain conditions; for details see the file
    COPYING in the distribution
    (/usr/share/texlive/texmf-dist/tex/plain/base/plain.tex
    Preloading the plain format: codes, registers, parameters, fonts, more fonts,
    macros, math definitions, output routines, hyphenation
    (/usr/share/texlive/texmf-dist/tex/generic/hyphen/hyphen.tex))format file stored in 689 milliseconds
    
    No pages of output.
    Transcript written on plain.log.
    
  7. 现在可以使用了!

    $ ../../../bin/i386-linux/nts -fmt=plain '\input story \bye'
    This is NTS, Version 1.00-beta
    NTS comes with ABSOLUTELY NO WARRANTY.
    This is free software, and you are welcome to redistribute
    it under certain conditions; for details see the file
    COPYING in the distribution
    ./plain.nfmt loaded in 1120 milliseconds
    (/usr/share/texlive/texmf-dist/tex/plain/knuth-lib/story.tex [1])
    Output written on story.dvi (1 page, 668 bytes).
    Transcript written on story.log.
    

story.dvi就是我们熟悉又喜爱的故事:

故事.dvi

我尝试使用其他一些更大的纯 TeX 文件,例如gentle.tex本书的源代码TeX 简介。 有用。

它明显变慢了(即使在 2017 年):whiletex gentle.tex需要 0.05 秒,../../../bin/i386-linux/nts -fmt=plain gentle.tex而 3.71 秒。不过这可能是可以接受的。请注意,虽然字体文件和其他文件是从 TeX Live 安装中加载的(可能是在使用 查找之后kpsewhich),但实际进行排版的代码都是 Java 代码。

奇怪的是,由 TeX Live 生成​​的 dvi 文件ntstex由 TeX Live 生成​​的 dvi 文件略有不同:您可以dvitype在相应的 DVI 文件上运行,以查看计算出的位置有微小的差异,甚至命令顺序也不同。所以我对“通过行程测试”的评论感到好奇(但行程测试可能也不需要相同的 DVI 文件)。尽管如此,就我所见,从视觉上看,换行符或分页符或字符位置没有差异。

相关内容