![法律必需(最低限度)多样性(复杂性)](https://linux22.com/image/472031/%E6%B3%95%E5%BE%8B%E5%BF%85%E9%9C%80%EF%BC%88%E6%9C%80%E4%BD%8E%E9%99%90%E5%BA%A6%EF%BC%89%E5%A4%9A%E6%A0%B7%E6%80%A7%EF%BC%88%E5%A4%8D%E6%9D%82%E6%80%A7%EF%BC%89.png)
最近我越来越担心 LaTeX 可能被以下语言超越:打字因为它的简单性。这个答案显示了 Typst 与 LaTeX 的几个优势。
我一直在和我的一个同学争论为什么我仍然选择 LaTeX 而不是 Typst:
- LaTeX 的排版质量优越(尽管 Typst 正在迅速追赶)
- 我爱Ti钾Z,而 Typst 没有对应产品(实际上现在中枢神经系统)
- Typst 对 CJK 的支持较差,而 XeLaTeX 和 LuaLaTeX 可以很好地处理 CJK 字体(我认为他们很快就会解决这个问题)
- Typst 中的数学很糟糕,LaTeX 已经设定了标准
- 实际上,由于我已经习惯了 LaTeX,所以我不想切换到 Typst
:-(
然而,我被一些事实震惊了:
- LaTeX 中的宏不如实际编程那么方便,尽管有 LaTeX3 可以缓解该问题。
- LaTeX 文档的编译可能很慢,而 Typst 使用 Rust。
- Typst 的语法更简单,人们更倾向于学习 Typst 而不是 LaTeX. LaTeX 有很多软件包(有的甚至有冲突),这可能会让学习者感到困惑。
我看到了 LaTeX 社区内部的一些变化,包括构造使用 Rust 重写 LaTeX。
那么 TeX 社区的计划是什么,让 TeX/LaTeX 这种美丽的语言继续蓬勃发展?我渴望了解更多,并希望做出贡献。
答案1
好吧,一开始我对“简单”和“快速”的说法持谨慎态度。10 年前,我回答了一个关于 Word 与 LaTeX 有何不同的问题,
是的,使用 Word 可以毫无问题地完成大多数正常的事情(有时甚至更快或更轻松)。但是,如果是稍微“不正常”的事情怎么办?
typst 是“现代”的,是“年轻”的另一种说法。当它刚开始的时候,它甚至不能做脚注、浮动、书签、双页布局、表单字段或 PDF 注释等相当普通的事情。虽然其中一些现在已经实现,但它们仍然缺少 LaTeX 或支持包中存在的许多配置选项。一个当前的例子是关于如何获得像\pageref
在 typst 中获得像 a 这样基本的东西的讨论:https://github.com/typst/typst/issues/2873。
用简单易学的语法做简单的事情很容易,我非常同意这# my chapter
是一种创建标题的简洁方法(但 LaTeX 语法\chapter{my chapter}
也不长),但问题是如果你想要更复杂的东西会发生什么。未编号部分是否有直观的语法?如何调整目录中或标题中的条目?它是内置的还是需要查找并复制十行或更多行代码,就像上面引用的问题中的 pageref 一样?一旦 typst 变得更加成熟并收到有关更复杂文档功能的功能请求,它是否还会保持易于使用?
其次,我非常苦恼,像 typst 这样的“现代”系统从一开始就不支持 PDF 可访问性功能。可访问性对于私人文档可能并不重要,但任何为某个组织撰写文档的人都必须尽快考虑这个问题。typst 的作者知道这一点,他们也知道他们需要带标签的 PDF 的结构数据,但他们编写的编译器却丢失了这些数据:“由于框架目前仅包含定位器而不是到文档结构的完整反向映射,因此导出器无法写入此结构信息。“ 他们宣称他们处于有利位置,因为有相当多的语义信息可用但是 LaTeX 拥有 30 年来可用的语义信息,因此很难生成可访问的、带标签的 PDF。
如果我考虑从头开始编写排版引擎(我不会这么做,因为我认为大型系统应该通过演进来改变,而不是通过拆毁和重建——你不可能在从头开始重新设计城市时把城市的所有居民都搬走),那么我会确保核心设计从一开始就考虑到可访问性,而不是事后才添加。他们错过了这个机会,在我看来,typst 非常不现代。
答案2
作为一个也在编写 LaTeX 替代品的人,我认为将来用某种东西取代 LaTeX 是一件好事。用 TeX 宏语言编程很乱,而向后兼容的承诺意味着进展缓慢甚至不可能(我仍然认为将 LaTeX3 合并到不断发展的 LaTeX2e 中而不是利用主版本号来破坏向后兼容性是一个严重的错误。
我预测,如果 LaTeX 的继任者真的出现,它将保留 LaTeX 的标记,但会避开基于宏的编程模型。作者需要能够顺利过渡。我认为没有人会为脆弱的 LaTeX 宏系统的消亡而感到惋惜。TeX 是图灵完备的,并不意味着它是最好的做事方式,甚至不是一种好的方式。
我希望看到的是软件包和文档类(或它们的等效项)的版本控制,这样当 CTAN 更新一个深度为三个依赖项的软件包并且其文档不再编译时,没有人会感到惊讶。此外,在现代计算系统中,没有理由需要多次运行来管理参考和引文之类的内容。单个应用程序将能够处理 LaTeX、BibTeX、makeindex 等功能。
我也觉得,与其这样写,
\documentclass{amsart}
更好的方法可能是
\DocumentStructure{article}
\DocumentFormat{ams}
或者更好的是:
\DocumentStructure{article:1.0}
\DocumentFormat{ams:ams:1.0}
我们不仅有版本号,还有命名空间,因此不必担心彼此的文件名发生冲突。
最后,我建议,如果不存在本地副本,则自动下载文档的外部依赖项,以便核心分布不再那么庞大。
答案3
typst 最大的缺点,也是我认为的一个严重的设计错误,就是它与 不兼容。如何处理大量现有文档、档案等?扔掉一切,从头开始?我从 LaTeX 诞生之日起就一直在使用它,到现在已经快 40 年了LaTeX
!改进的里程碑是使用 Laserjets(快速适应)、pdfTeX
、babel
、现在是l3
层、LuaTeX
、PGF/Tikz
、BiblaTeX
。microtype
TeX/LaTeX 的标记语言将会经久不衰,可能比我们仍在使用的许多老一代语言寿命更长。任何读过《Dragon 之书》的人都会告诉你,想出一个能从周围的字母海洋中挑选命令和参数的编译器并不容易。
可以改进吗?可以!我认为可以改进的地方有:
- 自动替换字体中缺失的字形,类似于 Web 浏览器和 IDE 所做的操作。目前可以使用 LuaTeX/LuaLaTeX 和后备字体来实现此功能,但速度非常慢。
- 可编程输出例程。默认值应内置于 TeX 引擎本身。
- 包中冲突的许多问题都来自
hyperef
。应该设计一种新机制,使作者能够更轻松地使用链接,而不是依赖于包。可以修改基类以纳入这一点,因此无需 hyperref 重新定义所有分段和引用命令。将其纳入格式。 - 通过为 haffbuz 和 LuaTeX 做出贡献,可以改善对印度语和东亚文档的处理。无需加载包即可更改语言。
- 虚拟字体的创建可以得到改进。
谢谢所有尝试和开发不同系统的人,竞争是好事,祝你们好运。前几天我查看了一些统计数据,发现在 l3 和 LuaTeX 之间,在一次运行中加载的内容上添加了大约 130,000 个 loc。原始 TeX 有大约 20,000 个 loc。也许改进引擎本身以处理一些有问题的领域会比从头开始重写所有内容更容易、更有用。
答案4
在不知道 Latex 社区的具体计划的情况下,我们可以anticipate future development
在一定Latex
程度Typst
上重复使用 2 项科学发现。
这使得我们不再关注具体的计划或推测,而是采取更加全球化的视角。
法律必需(最低限度)多样性(复杂性)
这又回到罗斯·阿什比,他是控制论的创始人之一。他曾说过,部分内容引用自我的话:
- 处理复杂性
- 调节器/控制器必须至少同样复杂;
- 由于监管机制不够复杂,监管失败
- 尤其是有噪音(干扰)的情况下。
阿什比的例子
在他的《控制论导论》,1956 年他使用温度控制器来说明他的基本方程和考虑。
基本上它表明:
- 在正常的环境温度变化范围内,控制器工作正常
- 然而,如果天气条件极其恶劣,这种方法就会失效,因为它无法再补偿变化。
例如这里(简化章节), 或者此处(《综艺》杂志上的维基百科)或者这里(在他的书中,上面引用)。
我的插图
让我们想象一条简单的铁路。一条轨道,一列火车,没问题。火车整天来回行驶。
让我们逐步增加复杂性(C+)以应对不断增加的干扰(D+)。
D+:在同一条轨道上再放一列火车。现在问题出现了,因为它们互相阻碍。作为解决方案,我们需要增加系统的复杂性。
C+:让我们介绍一个时间表,它规定了哪趟火车到哪里、什么时候发车、多久发车一次等等。这可能适用于许多情况。
D+:同时乘坐两趟列车变得越来越流行,人们开始对从一端到另一端必须不断换乘列车感到厌烦。
C+:我们来添加一个道岔,这样两列火车就可以互相通过了。我们来调整时间表。
等等。我们都知道当今铁路系统的复杂程度,例如:
- 通常每个方向至少有两条轨道
- 在某些车站或附近有多条轨道
- 提供各种列车
- 使用各种信号
- 提供多种不同类型的铁路道口
- 拥有“外面发生的事情”的数字孪生
- ETC。
简化就像经济控制者倾向于做的那样,总有人要付出代价。(死路)
发明,并实现更简单和更复杂两方面的目的。(创新)
后者是发明者工作的总结(意图)“创新是一门科学”,根里奇·阿奇舒勒.(TRIZ,俄语缩写,我翻译的意思为:解决发明问题的实用理论)
这对 Latex 和 Typst 意味着什么?
我们都知道:Latex
它很复杂。或者在 Ashby 看来:它确实能应对很多变化/干扰。它已经发展到高水平的排版……并且仍然是,请参见此处。
从其发展来看,它Typst
仍处于所谓的 阶段infancy state
。它始于一个特定的概念,提供有限数量的排版结果,它将进一步发展,就像任何技术系统一样,
- 矛盾
(roadblock, trade-off: this EXOR that)
- 通过解决方案
(system change, exact solution: this AND that)
- 矛盾
(next roadblock)
.
正如许多人所说,Typst
IS 更简单,而且旨在如此。这可以转化为:
Typst
比以下更简单Latex
Latex
能够处理比现在更多的干扰/变化/要求Typst
,并且可能长期如此- 为了赶上 提供的多样性
Latex
,Typst
生态系统(语法、编译器、包、库等)必须变得更加复杂,必须能够吸收更多的需求/多样性
因此结果可能是:
- 更容易找到
Latex2Typst
译者(摆脱多样性) - 很难或几乎不可能找到
Typst2Latex
翻译器(增加了多样性/复杂性)(与仅以乳胶文件格式存储不同)
我的结论和估计(已经实现未来)
在不久的将来,我Typst
希望是等A另一个米阿卡普大号anguage,同时Latex
将继续支持排版......
两者之间的一些环节(上文称为翻译器)会时有时无。
可能存在一个有用的(相当大的)子集Typst
,可以被吸收(提供)Latex
。
相反,至少从排版上保留复杂性可能永远不会达到可用状态。