的创建biblatex
使bst
文件过时,允许使用 LaTeX 而不是 BibTeX 等附加程序进行格式化,但它并没有完全消除对附加程序的需求,而是为我们带来了 Biber。Biber 和 MakeIndex 等附加程序能做什么,而“纯”LaTeX 无法做到?如果引入一些新的“简单”原语,这些附加程序可以在 LaTeX 中实现吗?简单是指不创建原语\biber
。它们可以在 LuaTeX 中直接和“轻松”地实现吗?
答案1
良好的多字段排序实际上不能使用正则表达式来完成。您必须能够按照用户可定义的顺序比较字段,每个字段本地匹配允许区分大小写、升序/降序、可能还有 UTF-8 可变权重标点符号等。虽然这在理论上可能使用(非常扩展、严肃,如 Perl 的)正则表达式引擎来实现,但这会是一场彻底的噩梦,而且速度很慢。这通常需要一些棘手的数组技巧才能完成。
biber 中的唯一性系统(uniquename 和 uniquelist 尤其如此)需要大量相互依赖的循环结构,这些循环结构不受限制,但最终会退出。我怀疑 TeX 会像其他执行此操作的程序一样消耗内存。
您还需要快速的 bibtex 格式解析器(biber 通过 Text::BibTeX 模块使用 C 语言中的 btparse 库,该模块针对 UTF-8 直通进行了修改)。在 TeX 中进行解析和语法?不寒而栗。
Lua 是另一回事。它可能是可行的,而且会很棒。但你会惊讶于 biber 内部做了多少事情 - 移植它将是一项相当艰巨的工作。你可能可以构建一个 btparse 库的接口,这将是第一步。
答案2
您甚至不需要(理论上)引入新的原始元素。
eTeX(后台解释器,不是 TeX 或 LaTeX)是图灵完备的:TeX 图灵完备有什么缺点吗?
它具有读取和写入文件的能力。
因此从理论上讲,你不需要它。另一方面,实际上,你有两个问题:
beamer
在 eTeX 中编写真正的大型程序非常困难(例如,参见或的代码tikz
)。图灵完备性是一种基于“如果(记忆)容量是无限的“。但它不是无限的,并且运行
biber
/bibtex
意味着根据某些标准对大型数据结构进行排序,甚至加载这些结构在 TeX 本身中也可能是一个问题。(请记住,您可以调用bibtex
包含.bib
数千个条目的文件。)
我无法谈论 LuaTeX,因为我真的不了解 Lua。
答案3
虽然解释器是图灵完备的,但正如 tohecz 正确指出的那样,主要原因是这些外部程序的工作很难在 TeX 中实现。
对于 LuaTeX 来说,答案或多或少是历史性的。LuaTeX 从未打算取代 biber,但我确信,创建一个 biber 库而不是可执行文件,然后从 LuaTeX 调用此库,需要克服的技术问题很少。从长远来看,该功能甚至可能在 LuaTeX 中实现,但考虑到 biber/biblatex 的协同工作效果,问题是是否有人愿意在 Lua 中重新实现它。