我已经使用 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 中实现(低级)数组实际结果还不错,所以我不会太担心。你唯一需要做的就是避免使用数字键。