LaTeX3 中用于名称间距的 @@ 是否应为作业名称?

LaTeX3 中用于名称间距的 @@ 是否应为作业名称?

@@当引入内部宏的 l3doc 名称间距约定时,LaTeX 3 团队中的老前辈肯定会感到怀念。

但至少现在我们有一个合理的命名间距方案,这离封装包代码更近了一步。我个人认为这是 LaTeX 3 中实现的最伟大的想法之一。

有些语言(例如 Go)基于目录的命名空间,例如,

package main

   import "fmt"
   import "golang-book/chapter11/math"

   func main() {
     xs := []float64{1,2,3,4}
     avg := math.Average(xs)
     fmt.Println(avg)
   }

两个小的修改l3docstripl3doc可以很容易地从\jobname

     \edef\replaceModuleInLine{%
        \noexpand\replaceAllIn\noexpand\inLine{@@@@}{\string aa}%
        \noexpand\replaceAllIn\noexpand\inLine{__@@}{__\jobname}%
        \noexpand\replaceAllIn\noexpand\inLine{_@@}{__\jobname)%
        \noexpand\replaceAllIn\noexpand\inLine{!@@}{\jobname}%
        \noexpand\replaceAllIn\noexpand\inLine{@@}{__\jobname}%
        \noexpand\replaceAllIn\noexpand\inLine{\string aa}{@@}%
      }%

类似地,l3doc 中的代码可以更改为:

     \tl_replace_all:Nnn #1 { _ _ @ @ } { _ _ \jobname }

这个!@@构造是一个 hack,能够说明:

     !@@_do_something:n

并得到:

     \modulename_do_something:n 

对于人们可能想要在编程 API 中导出的函数(例如 l3 \keys_define:nn)。

在实际的包中,不需要守卫,而只需要在可能想要跳过名称空间的地方进行<@@=module>守卫。<@@=>

现在我们拥有了大多数可以扩展这一想法的工具\RequirePackage\usepackage如果有人想采用类似于 Golang 的基于路径的方案,那么这个想法就可以轻松扩展。这还有一个好处,即一个目录中的所有包都喜欢l3draw命名空间中具有相同前缀的所有文件。

您认为这是一个好主意吗?它会破坏什么?如何改进?

相关内容