我知道 ConTeXt 是一个宏包,而 luaTeX 是一个引擎。据我所知,luaTeX 是纯 TeX + Lua 作为嵌入式脚本语言。此外,ConTeXt 可以使用 Lua。
我的问题是,它们的区别在哪里?换句话说,在哪些情况下,一个会胜过另一个(即优点和缺点)?
答案1
与 Gaussler 所说的相反,从 2018 年左右开始,出现了一种名为 ConTeXt LMTX(Lua、Metapost、TeX、XML)的新格式,使用名为 LuaMetaTeX 的新引擎。我将尝试总结一些我熟悉的优点和缺点。此外,为了简单起见,我列出了 ConTeXt(格式)和 LuaMetaTeX(引擎)的功能。
编辑:Gaussler 对普通用户来说是正确的。ConTeXt MkIV 和 LuaTeX(OpTeX、LaTeX、Plain 等)理论上应该能够做基本相同的事情。只有当您需要更多调整或功能时,差异才会变得明显。
优点
- 扩展宏解析器:另外
#1
...#9
您必须#+
按原样传递一个参数,#-
以丢弃一个参数和#0
吞噬参数。还添加了伴随原语。我认为它们不适合普通用户使用。详情如下:http://www.pragma-ade.com/general/manuals/evenmore.pdf - 更精细地控制框,例如,允许您“切片”文本行(http://www.pragma-ade.com/general/magazines/mag-1105-mkiv.pdf)。这是可能的,但是使用 LuaTeX 会更复杂。
- 更精细地控制文本方向。LuaMetaTeX 不再像 LuaTeX 那样支持四个方向。相反,它支持两个方向并提供了一个方向模型。示例用途包括垂直排版:http://www.pragma-ade.com/general/manuals/followingup.pdf. 非常适合 CJK 和蒙古语。
- Metapost/Metafun 的新界面。Aditya Mahajan 已经阅读了一篇很好的总结,其中介绍了如果你想编写自己的界面,可以使用这些界面实现哪些功能:https://adityam.github.io/context-blog/post/new-metafun-interface/预定义接口列表如下:http://www.pragma-ade.com/general/manuals/luametafun.pdf。我提到它们是因为 Metapost 本身(如
mpost
)不支持此类添加。 - 通过 Metapost 提供部分 SVG 支持(据我所知,ConTeXt MkIV 依赖外部依赖项)。这包括 SVG 字体(例如表情符号字体),尽管有一些调整。示例如下:http://www.pragma-ade.com/general/manuals/svg-lmtx.pdf
- 较小的二进制文件。
缺点
- 默认情况下不支持编译库 (.so/.dll)。这是因为 LuaMetaTeX 不完全支持它们,您必须包含自己的 Lua 库。此外,与使用 LuaTeX 的 ConTeXt 不同,您需要一个额外的标志
--permitloadlib
。根据 LuaMetaTeX 手册,“之所以有这个选项是出于对安全性的期望 [...],所以这可能会给人一种额外的保护感”:http://www.pragma-ade.com/general/manuals/luametatex.pdf - 不算缺点,但需要注意。LuaMetaTeX 使用 Lua 5.4,目前该版本正在积极开发中,因此与 Lua 5.3 相比会存在一些细微差异(和错误)。
答案2
ConTeXt(最新版本)专门在 LuaTeX 上运行。因此,LuaTeX 能做的所有事,ConTeX 都能做。