考虑一个包裹(或者班级) 为宏提供了两个可选参数。
(i)使用twoopt
。文件中的代码.sty
易于阅读,因此也易于理解。
(ii) 手动编写宏。代码看起来很糟糕,但不会将用户绑定到其他包。
此外,有时有多个包可以实现相同的功能:ifthen
,xifthen
和ifthenx
。
我该如何选择使用哪个包?在什么情况下我应该手动编码?有最佳实践吗?请注意,这些例子只是例举了一般性问题。
答案1
如有疑问,请选择标准。
尽管尚未根深蒂固(目前如此ifthen
),但即将推出的 LaTeX3 内核的编程层功能expl3
强大且非常稳定。即使在texlive-core
Arch Linux 软件包存储库的软件包(想想最简约的简约),包含整个 L3 内核。它将始终可供您的用户使用。
根据相关问题的经验,不要除非必须,否则不要手工编码——这几乎不可能维护,而且正如你所说,从表面上看也不可能理解。
这里可能缺乏惯例,但无论如何,最好的惯例是使用官方的东西。
从这里:使用 查找以下内容texdoc
:
expl3
解释背后的原因经验埃里门塔尔大号特克斯3语法并引入了组件“包”(实际上,你只需要\usepackage{expl3}
interface3
expl3
作为整个库和界面的参考xparse
定义具有更复杂语法的命令的宝贵资源
答案2
如果该twoopt
软件包满足您的需求,那么使用它就没有问题......
总体而言,LaTeX 是一个不断发展的系统。软件包是这个过程的引擎。如果忽略它们的普遍使用,或者选择在有合适的软件包的情况下进行硬编码,那么你将放弃 LaTeX 系统的一个重要特性。
虽然最后一句话听起来有点夸张,但确实有道理。除此之外,这往往还是一个选择和习惯的问题(我们都是人类!)。但是,如果你有机会通过使用包获得更易读的代码,前进。顺便说一下,这个标准是 LaTeX3 项目的一个主要问题。
绑定到.sty
或.cls
文件中的包不会以任何方式限制您。即使您在自己的包代码中使用的包将来会因为新包更好或其他原因而被弃用,也并不意味着您使用的功能不再可行。此外,作为包编写者,您可以根据情况维护/更新包。除此之外,我想提醒大家,LaTeX2e 目前非常稳定。因此,从这个角度来看,“[使用] 官方的东西”(@Sean Allred,见上文)是完全合理的。
最后,如果三个软件包对于某个特定问题完成的工作完全相同,我会参考上面的陈述“我们都是人类!”:使用你最喜欢的或你习惯的那个。