![LaTeX3 中已经实现了哪些新功能?我当前的文档(包含许多软件包)是否仍可以使用 LaTeX3 进行编译?](https://linux22.com/image/231521/LaTeX3%20%E4%B8%AD%E5%B7%B2%E7%BB%8F%E5%AE%9E%E7%8E%B0%E4%BA%86%E5%93%AA%E4%BA%9B%E6%96%B0%E5%8A%9F%E8%83%BD%EF%BC%9F%E6%88%91%E5%BD%93%E5%89%8D%E7%9A%84%E6%96%87%E6%A1%A3%EF%BC%88%E5%8C%85%E5%90%AB%E8%AE%B8%E5%A4%9A%E8%BD%AF%E4%BB%B6%E5%8C%85%EF%BC%89%E6%98%AF%E5%90%A6%E4%BB%8D%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%20LaTeX3%20%E8%BF%9B%E8%A1%8C%E7%BC%96%E8%AF%91%EF%BC%9F.png)
我确实知道 LaTeX3 是一个长期项目,但我感兴趣的是了解 LaTeX3 有什么新功能,以及是否有任何重大进步和向后不兼容的变化。
答案1
目前,LaTeX3 的“可用”部分包括:
- 这解释3语言。这提供了一种比使用 TeX 基元加上 LaTeX 内部函数更“像编程”的语言。该语言仍然不稳定(我正在推动一些变化,但团队的其他成员并不那么确定),但总体形状已经确定。我们的想法是继续扩展 expl3 以添加更多功能。例如,我目前正在研究我们需要什么类型的实数算术。
- 解析。这是一个比 更强大的定义文档命令的包
\newcommand
。我经常提到 xparse,因为我喜欢它 :-) 对我来说,它工作得很好(注意:我编写了当前实现的大部分内容,尽管这些想法并不是我的想法。)使用 xparse,您可以快速定义在 LaTeX2e 中很麻烦的各种输入语法。它还可以生成强大的命令(使用 e-TeX),并允许您在环境结束时自动访问环境的参数。 - 模板。这旨在通过为设计决策提供适当的结构来实现设计和实现的分离。模板概念很难用几行字来解释:我只能建议您阅读文档。
以上任何内容都不会改变 LaTeX 的任何现有部分:这是故意的。我们目前正在研究的是诸如样板(页面上的框)和输出例程之类的内容。这些包(目前不在 CTAN 上,但可从公共 SVN 获得)确实会改变 LaTeX 的行为(尤其是输出例程)。
当前模块的优势在于,您可以使用它们并知道您有文档记录的内容。与 LaTeX2e 中的编程不同,我们旨在解释所有“公共”的 expl3 函数,这样您就不需要使用 TeX 的片段、有文档记录的 LaTeX 的片段和无文档记录的 LaTeX 的片段来使事情正常进行。我已经在 expl3 中编写了 siunitx,它使 LaTeX 编程变得容易得多。(将 siunitx v2 的代码与 v1 的代码进行比较即可看到这一点!)
目前尚未正式确定的是 LaTeX3 对最终用户来说是什么样子。不过,我认为,我们可以确信,目前的基本模型
\documentclass{<something>}
\begin{document}
Some text \emph{with italics}.
\end{document}
将会生存下来(如果生存不下来,项目将会失败)。
我知道 LaTeX3 是“长期的”,但 expl3 和 xparse 等产品的目标是现在为用户带来新的想法。正如我所说,siunitx(一个 LaTeX2e 包)几乎完全用 expl3 编写,并且字体规格也正在朝这个方向发展。这意味着这些软件包的用户无需了解 LaTeX3,就可以获得更清晰的编程方法带来的好处。我一直在推广 xparse,因为它可以让你轻松地完成一些\newcommand
不需要
\NewDocumentCommand\foo{omom}{%
% Mandatory #2 and #4
% Optional #1 and #3
}