最近,我认为编写 LaTeX 类、宏等程序是一项有用且有趣的技能,因此查看了现有的资源(这个问题非常有帮助)。然而在此过程中,我想起了正在进行的 LaTeX3 项目,并最终研究了它,从而发现了expl3
,据我所知,它将在 LaTeX3 发布时形成“编程层”。
这就引发了一个问题:是否值得尝试掌握构成当前 LaTeX 源/包/类等编码的各种语言和命令,从而能够使用围绕 LaTeX2e 设计的东西,我想我会暂时继续使用它,还是我应该把精力集中在学习上expl3
?
在我看来,后者是更好的选择,因为在未来(我们希望)这将是仅有的需要或确实有用的语言知识;此外,似乎更容易学习expl3
尝试掌握目前存在的 LaTeX2e 编程的多个方面(如所述)更容易这里)。
我唯一的犹豫(除了学习这项艰巨的任务之外——我发现很难找到全面的文档,但我知道这是 LaTeX3 项目旨在解决的问题,所以我对未来充满希望),是当我在基于 LaTeX2e 的文档中使用我的知识时,我可能会发现自己受到限制,因为我使用的语言不是系统的“基础”。我知道expl3
目前存在一个包,这就是我将如何实现我的知识(如果需要),但我想知道(也许这应该分成一个单独的问题?)我是否希望在 LaTeX 中执行任何编码方面(或其他任何事项)(编码文档类以创建花哨的宏)的操作,但这些操作expl3
会不足或太过笨重而无法实际实现?
顺便提一下,在尝试学习其中一种expl3
或替代语言之前,人们会建议先熟悉其他(有更好文档的)编程语言吗?我担心自己在这里有点陷入困境,因为虽然我对 LateX 的了解不错,但到目前为止,在我的数字生活中,我接触的编程很少。
我知道这里有大约三个不同的问题,如果应该将它们分开,我非常愿意将它们编辑掉并重新发布到其他地方。
与往常一样,非常感谢任何帮助:)
答案1
虽然我认为这个问题相当广泛,但我还是尝试以包和类编写为重点来回答它。 我将使用您的问题的缩写版本:
学习稳定的 TeX/LaTeX2e 语言是否值得,还是我应该只集中精力学习 expl3?
让我们区分一下你想要什么:你将在整个过程中使用 LaTeX 语法文档,即在您的软件包将被使用的地方。在这个级别,您应该依赖 LaTeX2e 语法(例如没有下划线)。另一方面,您想要“编程”您的软件包,在那里您可以使用 expl3,它更强大,更适合宏编写。
我个人总是鼓励人们学习
expl3
TeX 编程,因为它对“编程的理智性”有很大的改进(评论中如此称呼)。但请记住,TeX 编程并不是一切,你必须牢记文档(例如,这就是xparse
开始的地方)。所以你不应该只关注两者之一,但从长远来看,你可能需要了解 TeX/LaTeX 以及 expl3(如果学习 expl3,也许你不需要学习 TeX 编程的每个细节,因为编码可以在 expl3 中完成)。
我是否希望在 LaTeX2e 中执行任何操作(例如,编码文档类来创建奇特的宏),而 expl3 对此而言不够用/不切实际?
目前可能确实如此,因为 expl3 还远未完成,您会在某些时候遇到这种情况。但基本上,您可以使用它来创建文档类以及包(例如
\ProvideExplPackage
),根据我自己的经验,我可以说它在很多方面大大缩短了您的代码。还有一些新奇的概念,如棺材或正则表达式,它们确实有助于编写包。但是你不应该使用 expl3 来编写文档设计级别的代码,例如 pgf/TikZ 重度包或类,因为 expl3 的空间无知会造成比它本身更多的麻烦。如果你想编写这样的包,你绝对应该使用 LaTeX2e 机制。
在尝试学习 expl3 或其他语言之前,是否建议先熟悉另一种编程语言?
我在使用 TeX 之前学习过编程,并且我认识到这些知识对于学习 LaTeX2e 并没有太大的帮助。但当我开始学习 expl3 时,我发现了解一些编程知识非常有益,尤其是变量、函数和作用域等概念。
在我看来,了解一门编程语言会让你受益匪浅,尤其是如果你理解了 LaTeX2e 的文档级别,你也许能够很好地理解 LaTeX 编程(如果你有耐心阅读文档)。