TeX 的数据结构

TeX 的数据结构

我经常发现自己想要使用 TeX 中的标准数据结构。例如,列表或映射。每次有这种需求时,我都会重新发明轮子。出于某种原因,我发现自己经常使用堆栈。

是否有一个标准软件包(纯 TeX 或 LaTeX)可以提供方便的数据结构接口?如果可以将结构组合起来,例如,您可以获得地图列表,那么它们将非常有用。

答案1

其中一个想法是expl3是提供一系列标准编程工具,数据结构也包含在内。目前,可用的结构化数据类型有序列、堆栈和属性列表。序列和堆栈具有相同的底层结构:它们是看待同一事物的不同方式。因此我们可能会

\seq_new:N \l_my_seq
\seq_put_right:Nn \l_my_seq { Some-tokens } % Sequence-like access
\seq_push:Nn \l_my_seq { More-tokens } % Stack-like access, puts to left

属性列表是一种键值类型数据类型

\prop_new:N \l_my_prop
\prop_put:Nnn \l_my_prop {  key-name } { value }

属性列表是“无序的”,而序列/堆栈是有序的。在这两种情况下,都有可用的函数来映射到存储数据中的每个项目,例如\seq_map_function:NN

可以根据需要添加新数据类型expl3:这取决于 LaTeX3 项目的要求,也取决于其他项目的要求。(当然请注意,我是 LaTeX3 项目的成员!)

另一组软件包提供了一些与expl3包含许多数据相关结构类似的想法,它们是etoolboxetextools.这两个包提供了映射到列表等的函数。

你也可以看看datatool包,可用于在 LaTeX 中构建表格并以类似数据库的方式访问数据。

另外需要注意的是,LuaTeX 提供了对原生 Lua 数据存储方法的访问,如果你正在做一个只使用 LuaTeX 的项目,这当然是你应该首先考虑的地方。

答案2

我最近发现了一个包arrayjobx(nee arrayjob),它改变了我对 TeX 的使用。链接列表和索引引用非常简单。数组与 TeX 的结合fp使我能够管理 TeX 中的数字数据以供显示。阅读代码arrayjobx也非常有启发性。

\documentclass{minimal}
\usepackage{arrayjobx}
\makeatletter
\usepackage{trimspaces}
\def\trimspace#1{\trim@spaces@in{#1}}
\makeatother

\begin{document}
\newarray\MyData

\readarray{MyData}{%
Years       & 1996 & 1997 & 1998 & 1999 & 2000 &%
Revenues    & 1034 & 1226 & 1445 & 1503 & 1992 &%
Costs       & 668  & 706  & 813  & 946  & 1010  }
\dataheight=6

\def\returnHeading(#1){\checkMyData(#1,1)\trimspace\cachedata \cachedata}
\def\returnYear(#1){\checkMyData(1,#1)\trimspace\cachedata \cachedata}
\def\returnData(#1){\expandafter\checkMyData(#1)\trimspace\cachedata \cachedata}


\def\mycolumn{3}
\def\myrow{2}

Our expected \returnHeading(\myrow) in \returnYear(\mycolumn) were 
\$\returnData(\myrow,\mycolumn).

\end{document}

另一方面,我不熟悉其他答案中提到的软件包。也许它们会使 arrayjob 过时。

答案3

没人在 Luatex 中提到过通往 Lua 的桥梁吗?好吧,Patrick 间接提到了。

  1. Luatex 本身为 Lua 实现的一半提供了许多低级原语,最重要的是命令\directlua。使用这个级别有点麻烦。
  2. Context 4 毫不奇怪地对 Lua 提供了很好的支持。例如,\startluacode ... \endluacode允许 Lua 自然地嵌入到 Context 文档中。这很重要,因为 Context 使用 Lua 来管理整个编译过程。
  3. 出现了用于 Latex 的高级 Lua 基础架构,代号为 Lualatex,带有必需的\LuaLaTeX宏,以及同样不错的嵌入代码环境。Texlive 2009 中没有太多内容,我还没有升级到 2010,但关于在 Latex 中支持 Luatex 挂钩的文档,帕特里克指出对我来说,看起来很开胃。
  4. Luatex 对 Plain Tex 有一些支持,代号为 Luatextras。

Lua 具有一种良好、高效、简约的数据结构方法,基于其表的概念,融合了列表和关联数组,并与其新颖的轻量级闭包方法一起使用,作为基于原型的对象系统的基础。

不错的,看看吧。

答案4

我记得不久前在这个网站上看到过一个链接lambda 列表又名TeX 口中的清单作者:Alan Jeffrey。虽然我还没有尝试过,但它确实看起来不错,而且很实用。

相关内容