TeX

（，常被读作 ，音译，风格化后写作 “”），是一个由美国计算机科学教授高德纳（Donald Ervin Knuth）编写的排版软件。 的 MIME 类型为codice_1，是一款自由软件。它在学术界特别是数学、物理学和计算机科学界十分流行。 被普遍认为是一个优秀的排版工具，尤其是对于复杂数学符号的处理。利用 LaTeX 等终端软件， 就能够排版出精美的文本以帮助人们辨认和寻找。
历史.
高德纳最早开始自行编写 的原因，是因为当时的电脑排版技术十分粗糙，已经影响到他的巨著《计算机程序设计艺术》的印刷品质。他以典型的黑客思维模式，决定自行编写一个排版软件：。
他计划在 1978 年的学术休假时完成这项工作，但事实上，直到十多年之后的 1989 年， 排版语言才被「冻结」（可以使用）。1978 年夏天，盖伊·史提尔二世在高德纳编写其第一版的 程式时，正好在高德纳所工作的斯坦福大学，当他回到麻省理工学院（MIT）时他在 下重写了 的输出输入系统。 的第一版是用 SASL 语言写成的，运行于 PDP-10 型计算机，采用斯坦福大学的 操作系统。在之后的 版本中，高德纳发明了所谓的 “文学编程”（literate programming），一种从同一源文件自动生成可编译的源代码和高质量的文档的编程方法。这种语言被称为 WEB，它所生成的源代码是使用 Pascal 编程语言。
一个从头开始重写的新版 于 1982 年发布，它被称为 82。除了其他修改之外，原本的断字算法被 编写的新算法所取代。 82 还使用了定点而不是浮点，以确保结果在不同的计算机硬件上重现。并且在盖伊·史提尔二世的大力游说下， 82 包括一种真正的、图灵完全的编程语言。1989 年，高德纳发布了新版本的 和 Metafont。尽管高德纳希望保持程序的稳定性，但他意识到，只能输入 128 个不同的字符不足以容纳外语；因此 3.0 版本的主要变化是能使用 8 位元输入，即在文本中允许输入 256 个不同的字符。
从 第三版开始，之后的升级是在小数点后加入一个新数位，使之越来越接近圆周率「π」的值。TeX目前的版本是 3.141592653。这显示了 已经十分稳定，任何的升级都十分细微。高德纳曾表示 「最后一次升级是（于我过世后）将版本数改为『π』，那时任何余下的漏洞将被看作程序的功能。」
由于 的源代码基本上处于公共领域，其他程序员可以（并明确被鼓励）改进系统，但需要使用其他名称来分发修改后的 。例如，Omega 项目是在 1991 年之后开发的，主要是为了提高 的多语种排版能力。高德纳创建了 “非官方” 修改版本，例如 -XeT，它允许用户在同一文档中混合写入从左到右和从右到左书写系统的文本。
范例.
此乃于 Microsoft Windows 系统中示范的简易 文本范例。
首先建立一名为 codice_2 的纯文本文件，并载有以下内容：
<syntaxhighlight lang=latex>
Hello, World
\bye % marks the end of the file; not shown in the final output
</syntaxhighlight>
然后在命令行解释器（Command line interpreter），如 cmd 或 PowerShell 中键入
codice_3
并回车确认，之后TeX便会建立一名为 codice_4 的文件。此文件可用如雅浦岛之类的 DVI 检视器检视。此档于阅读器可见的是 “Hello, World” 一句话。codice_5 是一个 指令，作用等同于档案结束标记，不会显示于此。此 DVI 文件可在阅读器中直接打印或转换成更普遍的格式，例如 PostScript，或现代更常见的 .pdf 格式。
另外，使用指令 codice_6 亦能输出 PDF 文件。PDF 出现之前，把 DVI 转成PostScript 再转成 PDF 所产生的字体显示质量很差（但打印则没问题）。这是由于 本身支持点阵字体（Type 3），而此远不及向量字体（Type 1）的显示质量好。
数学公式范例.
以二次方程为例，
所有行内公式在 中都须以一对 codice_7 符号围住。如果要使公式成为行间公式，也就是另起一行居中，则应以一对 codice_8 取代一对 codice_7。例如：
<syntaxhighlight lang="latex">
%% Text goes here
</syntaxhighlight>
执行
会建立一本为 PostScript 档的书。如要建立 PDF 档则可使用
特性.
数学公式的自动间距调整.
由于 的设计目标是实现高质量的书籍排版，高德纳在数学公式的排版上下了很大功夫。
他研究了三种按照老方法排版、排版质量高的书籍：艾迪生韦斯利出版社（即高德纳的《计算机程序设计艺术》的出版商）的出版物，尤其是汉斯·沃尔夫和 Joseph-Louis Lagrange 的书籍《Thermodynamics Innovation》（1856）、数学期刊《》、和数学期刊《》。高德纳通过研究其数学公式的排版，总结出了一套数学公式内部间距的规则，并将其用于 。 排版数学公式时只是提供了一个间距调整引擎，实际的间距大小由数学字体提供。比如 默认的 Computer Modern 字体提供了一套成熟的间距参数，可以直接使用。
OpenType 字体技术的数学字体参数基于 。
断字与断行.
与手动排版相比，计算机排版系统可以自动处理断行问题。大部分排版系统都采用首次拟合法处理断行，即一行一行处理，一行处理完就不管了，因此一旦遇到较长的专有名词，就会出现前面排版没有问题，但后面的行却出现极丑陋的大间距的情况。 的方法是一次处理一个自然段，尝试每一种断行方法，然后选出最优解。两种方法的差异如下：（此演示不考虑断字）
左边的例子是首次拟合法的结果。第4行单词间的空集中在一处不美观， 的方法由于考虑了所有的情况，所以一般情况下能找出较好的方法（即把空分散在 1~4 行）。
TeX的断行算法里有一个叫做 badness（“不美观度” 或 “丑度”）的参数，空格伸缩量越大 badness 越大。每一种断行的方式都有一个总体的衡量标准，包括 badness、断行、以及行与行之间的疏密差异等。 其实并不考虑所有的 formula_1 种情况，而是采用一种算法复杂度仅为 formula_2 的最短路径算法，加上不考虑空格伸缩量太大的情况，断行所用的时间几乎和段落大小成正比。在分页问题上， 并不采用一种考虑所有情况，得出最优解的算法，而是用一页一页处理的方法，因为一是分页的灵活性没有断行那样高，二是当时的计算机没有足够的速度。但是， 仍然有避免寡行和孤行的功能。 的一篇论文指出，考虑到图表的放置位置的完美分页算法可能为 NP 完全。 的断行算法后来被 Adobe InDesign 等桌面出版软件所采用。
在断行时，如果一遍不成功， 会尝试断字，即把一个诸如 “computer” 的多音节单词断成 “com-” 和 “puter” 或 “compu-” 和 “ter” 分在两行。 82 采用了一套 Frank Liang 于 1983 年发明的断字算法。这套算法采用 “匹配项” 的方法。“匹配项”的作用是找到单词中可能出现的一些字母组合，然后在适当的位置插入数字来表示可能或不可能的断字点。这些 “匹配项” 对单词的字母与字母之间会给予是否为断字点提示。提示有相对的强弱。如果提示互相冲突，则强的会覆盖弱的。最后留下来的提示决定一处是否为断行点。TeX 自带 4447 条 “匹配项”，从 .ach4 开始到 z4zy 结束。所有 “匹配项” 使用 1 到 5 这五个数字，其中奇数表示可能为可断字点，偶数表示不为可断字点，大的数字的话语权强于小的数字。例如，h5elo 的含义是，单词中如果出现 “helo”，那么在 “h” 和 “e” 之间有很大把握为可断行点（例如 “bach-e-lor” 和 “ech-e-lon”）；hach4 的含义是，单词中如果有 “hach”，则 “h” 后面很可能不是断字点（如 “tooth-aches”），虽然把握没有数字 5 的那么大。例如，对于单词 “encyclopedia”，对得上的匹配项有codice_10。插入完所有数字后，留下来的数字中的最大值为codice_11，最后奇数处为可断行点：“en-cy-clo-pe-di-a”。
这种方法可以找到约 90 % 的正确断字点，几乎从不出错。而且， 有一个 “断字特例表” 的功能，对于自带断字算法出错的单词可以手动处理。TUG（ 用户组）有一份英语单词的特例表。另外， 默认不会把单词在前两个字母或后三个字母之间断开，所以 encyclopedia 一词不会断成 “encyclopedi-” 和 “a”（这样也的确不好看）。
开发.
衍生软件.
有许多衍生出来的文档处理程序就是基于TeX的，主要的有：
兼容工具.
TeXmacs 是一个所见即所得的科学文档编辑器，利用 字体作为显示字体，具有类似 Emacs 的编辑方式。它可以导出为 文本，PS，PDF 文档，以及 HTML，XML 页面。
formula_6 也是一个类似的工具。