TeX 中的数组功能?

TeX 中的数组功能?

我已经使用 LaTeX 一段时间了,但直到最近我才给自己制定了创建课程的任务。我需要学习 TeX 的细节,但我找不到一些问题的答案。其中之一是:

如何在 TeX 中实现动态分配的数组?我定义的一个环境采用单个参数,例如{1234}。我需要将其拆分为字符,这可以做到这边走。然后我需要列出如下数字array=[1,2,3,4]

然后我想循环这个数组的元素并在数组中放置一个i带有每列的单行表格环境。i

为了更清楚起见,我的目的如下。我们将定义一个选择环境,以便:

\begin{choices}{32}
\choice ch1
\choice ch2
\choice ch3
\choice ch4
\choice ch5
\end{choices}

将在两行中创建多个选项,第一行有 3 个选项,第二行有 2 个选项(3+2=5):

A) ch1  B) ch2  C) ch3
    D) ch4  E) ch5

这种符号将有助于创建更灵活的选择,每行最多有 9 个选择。

答案1

对于小规模阵列,通常的解决方案是使用\csname基于的方法

\expandafter\def\csname my@array@1\endcsname{content-for-key-1}

然后可以使用

\csname my@array@1\endcsname

根据使用情况,您当然可能希望将索引作为 LaTeX 计数器或 TeX 计数

\csname my@array@\the\my@array@index\endcsname

从历史上看,这种方法的问题在于,哈希表中的新 csname 空间可能会不足:与现在相比,TeX 曾经“很小”。因此,LaTeX3 团队探索了使用单个名称存储整个数组的方法:目前,这就是实现prop数据类型的方式。expl3

还有一个关于 TeX 哈希算法性能的问题。它并不是一个特别有效的算法,因此至少在理论上,冲突相当常见。因此,使哈希表太大至少在原则上可能会损害性能。但是,正如在如何在 TeX 中实现(低级)数组实际结果还不错,所以我不会太担心。你唯一需要做的就是避免使用数字键。

相关内容