如何编译 TeX 源代码

如何编译 TeX 源代码

我对 TeX(和 LaTeX)系统越来越感兴趣,想更深入地研究它。我不是说我想学习如何使用它,而是我现在想了解它的机制

我首先想到的是下载它的源代码纯棉。 但

...当前的 TeX 软件是用 WEB 编写的,它混合了用 TeX 和 Pascal 子集编写的文档,以确保可移植性......(维基百科)

我是一名业余 C 程序员,对 Win32 API 有一点经验,并且我总是使用 Microsoft Visual Studio 进行编程。

我完全不知道接下来要用上面的源代码做什么,例如,编译它并获取输出(在 Windows 和 Linux 上),使用输出编译 .tex 文件并获取输出。

有没有专家能谈谈并解释一下这个漂亮的系统,或者至少提供有关如何构建它的教程?

答案1

你链接到的plain.tex是写入的文件TeX 不是 tex-the-program 的来源(它是tex.web

现在,如果您想从源代码进行编译,最好先完整下载 texlive 构建源。

来源:

描述中提示了如果你想编译的话从哪里开始。具体请参见:

https://www.tug.org/texlive/build.html

祝你好运:-)

答案2

TeX(及其相关产品)的原始资料可以在以下网址找到:Knuth 的 CTAN。所有资料都有非常全面的文献,但尝试编译它们仍然是一项艰巨的任务。

TeX是用 WEB 编写的,WEB 是 Knuth 发明的一种编程语言。因此,我们首先需要 WEB。

网络是用 WEB 本身编写的,它由两个程序组成:weave 从 WEB 程序生成 TeX 文档,tangle 从 WEB 程序生成 Pascal 代码。要编译 WEB 系统,我们需要一个 tangle 的实现;您可以从现有的 TeX 包中获取一个,也可以从帕斯卡源

请注意,如果您想阅读任何 WEB 程序的实现,您可以使用 weave 和 TeX 来生成丰富的文档;这是 Knuth 代码的一个很好的起点。(对于 TeX 和 Metafont,您可以购买印刷版WEB 输出分别作为计算机和排版 B 卷和 D 卷。)

现在我们需要谈谈 Knuth 使用的 Pascal 方言,他称之为 Pascal H。TeX 是在 Pascal 标准化之前编写的;据我所知,没有原生的 Pascal H 编译器,并且它与现代 Pascal 编译器不兼容。然而 Knuth 以相对可移植的方式编写了这些程序,因此移植它们只是相当困难。此时您有以下选择:

  1. 为 Knuth 的 Pascal H 编写一个编译器
  2. 使用变更文件将 WEB 源移植到现有的 Pascal 方言
  3. 将 Knuth 的 Pascal H 翻译成另一种编程语言

tex-gpc采用方法 2,TeX live(和 Miktex)采用方法 3web2c

现在,如果您可以做到这一点,初始化和运行 TeX(initex、字体等)的实际过程将相对容易;确保您根据 TRIP 验证您的构建(参见 TeX 源)。如果您喜欢冒险,请对 Metafont、TeX 工具、Metafont 工具和 WEB 进行同样的操作。

关于 TeX 和 Metafont 的设计:这些程序由 Knuth 在 20 世纪 70 年代末设计,具有极高的稳定性、效率和可移植性。如今,程序员理所当然地认为现代处理器和编程标准的速度使他们能够更快地编写出功能齐全的程序。这些程序中发生的许多事情(例如,仔细枚举字符代码、在编译时静态分配内存、在线错误恢复)在当今的编程中很少发生;许多现代的烦恼(必须编译 LaTeX 两次才能进行反向引用、字体困难、宏语言的复杂性)都是这些设计目标和决定的结果。对于当今涉及多人、高效计算机和紧迫期限的大多数项目,我不会提倡使用 Knuth 的方法。尽管如此,TeX 仍然是目前仍在运行的最古老的程序之一(除非 LuaTeX 取代它,否则它将一直运行下去),设计精巧、实现复杂、可移植性强且文档丰富。

祝你好运!

答案3

David Carlisle 解释了如何编译 Texlive 基础的现代版本的 Tex 源代码(包括 Pdftex、Xetex 和 Luatex)。这些源代码源自 Karl Berry 对 Knuth 源代码的 Web2c 分支,这是一种将 Web 源代码转换为几乎可以在任何地方编译的 C 代码的机械方式。

如果你想编译更接近 Knuth 所写内容的资料(以及TeXbook), 看一眼:

http://www.ctan.org/tex-archive/systems/unix/tex-gpc/

该项目允许您使用 GNU Pascal 直接编译 Pascal WEB 源代码。这显然不是一件容易的事;正如作者 Wolfgang Helbig 所写:

在从源代码构建 TeX 时,我有些好奇,因为其中一些依赖于其他源代码的构建和安装。Knuth 用 WEB 语言编写了这些程序(WEB 与 CERN 的 WWW 中的最后一个 W 仅有一点点关系)。通过 tangle 将 WEB 程序转换为 Pascal 源代码,通过 weave 转换为 TeX 输入文件。当然,tangle 和 weave 也是 WEB 程序。因此,需要 tangle 来构建 tangle---需要 weave 和 TeX 来读取排版精美的 WEB 程序。但不要绝望,我切断了这个无限递归并提供了 tangle.p、tangle 的 Pascal 源代码和 tex.pdf。它展示了我更改 Knuth 程序的原因和方式。

他的文本.pdf详细记录这些变化。

答案4

说话没那么容易。给我看代码吧。~Linus Torvalds

  1. fpc在系统上安装 Free Pascal 编译器 ( )。

    pacman -S --noconfirm fpc # Arch
    apt-get install fpc       # Debian
    
  2. 下载,然后引导tangle和字体相关的程序。

     export TEX_HOME="$HOME/dev/tex"
     export PATH="${PATH}:${TEX_HOME}/work/bin"
     mkdir -p $TEX_HOME
     cd $TEX_HOME
    
     wget http://mirrors.ctan.org/systems/knuth/dist.zip
     wget http://mirrors.ctan.org/systems/knuth/local.zip
     wget http://mirrors.ctan.org/systems/unix/tex-fpc.zip
     for i in *.zip; do unzip $i; done
     rm *.zip
     mkdir -p work && cd work
     mkdir -p TeXinputs TeXformats TeXfonts PKfonts DVIPSconf
     mkdir -p MFbases MFinputs
     mkdir -p bin
     cd ..
     cp dist/lib/*.tex work/TeXinputs
     cp dist/cm/*mf dist/lib/*mf work/MFinputs
     cp local/cm/*mf local/lib/*mf work/MFinputs
     cp tex-fpc/shell/* work/bin
     fpc tex-fpc/tangle.p
     mv tex-fpc/tangle work/bin
     itgl dist/mf/mf.web tex-fpc/mf.ch
     itgl dist/tex/tex.web tex-fpc/tex.ch
     mv inimf initex work/bin
     mv tex.pool work/TeXformats
     mv mf.pool work/MFbases
    
  3. 更新tex-fpc/local.mf以定义打印机设置。请参阅中的评论 模式.mf了解详情。例如:

     % Brother HL-L2320D (name must be one to eight letters, lowercase)
     mode_def brhlld = 
        proofing := 0;
        fontmaking := 1;
        tracingtitles := 0;
        pixels_per_inch := 600;
        o_correction := 1;
     enddef;
     localfont := brhlld;
    
  4. 构建texweave程序。

     cd work
     inimf ../dist/lib/plain input ../tex-fpc/local dump
     mv plain.base MFbases
     cd ..
     sed -i '99,106s/\t//' tex-fpc/mf.ch
     tgl dist/mf/mf.web tex-fpc/mf.ch
     mv mf work/bin
     cd dist/mfware
     tgl gftopk.web ../../tex-fpc/gftopk.ch
     mv gftopk ../../work/bin
     cd ../../work
     ../tex-fpc/MFT/plainfonts
     ../tex-fpc/MFT/webfonts
     ../tex-fpc/MFT/mfwebfonts
     ../tex-fpc/MFT/manfonts
     ../tex-fpc/MFT/logmacfonts
     ../tex-fpc/MFT/tripmanfonts
     cp ../dist/lib/hyphen.tex TeXinputs
     cp ../tex-fpc/webmac-fpc.tex TeXinputs
     initex ../dist/lib/plain \\dump
     mv plain.fmt TeXformats
     cd ..
     sed -i '198,204s/\t//' tex-fpc/tex.ch
     tgl dist/tex/tex.web tex-fpc/tex.ch
     mv tex work/bin
     tgl dist/web/weave.web tex-fpc/weave.ch 
     mv weave work/bin
    
  5. 构建xdvi程序。

     cd tex-fpc/xdvi
     wget https://math.berkeley.edu/~vojta/xdvi/xdvi-22.86.tar.gz
     tar xf *gz
     rm *gz
     mkdir -p $TEX_HOME/xdvi/bin
     mkdir -p $TEX_HOME/xdvi/man/man1
     mkdir -p $TEX_HOME/xdvi/share/dvips/config
     cd xdvi*
     CPPFLAGS='-DBDPI=600 -DMAKEPK=4' ./configure --prefix=$TEX_HOME/xdvi \
       --with-default-texmf-path=$TEX_HOME/work/DVIPSconf \
       --disable-freetype \
       --enable-old-make-pk \
       --enable-extra-app-defaults=$TEX_HOME/work/DVIPSconf \
       --with-default-font-path=$TEX_HOME/work/PKfonts \
       --with-default-header-path=$TEX_HOME/work/DVIPSconf \
       --with-default-fig-path=.:$TEX_HOME/work/TeXinputs \
       --without-mfmode
    
     make && make install
     cd ../../..
     mv xdvi/bin/xdvi* work/bin
     cd work
    
  6. 编织 TeX-FPC 文档。

     wve ../dist/tex/tex.web ../tex-fpc/tex.ch && xdvi tex
    

其结果是:

柔性电路板

参见 Wolfgang Helbig 的TeX-FPC 自述文件文件以了解详细信息。

相关内容