Arrays LaTeX是否具有数组数据结构?

Arrays LaTeX是否具有数组数据结构?,arrays,latex,tex,hbox,Arrays,Latex,Tex,Hbox,乳胶中有阵列吗?我不是指排版数组的方式。我的意思是数组作为数据结构,在LaTeX/TeX中作为“编程语言”。我需要在一个数组中存储多个vbox E或hbox E。它可能类似于“宏数组” 更多细节:我有一个可以排版歌曲的环境。我需要存储一些歌曲的段落作为宏\歌曲段落的参数(因此我不会对它们进行排版,只存储这些段落)。因为我不知道一首歌可以有多少段落,所以我需要一个数组。当环境关闭时,所有段落都将被排版,但它们将首先被测量,并计算每个段落的最佳位置(例如,一些段落可以在两列中一个放在另一个旁边,以使

乳胶中有阵列吗?我不是指排版数组的方式。我的意思是数组作为数据结构,在LaTeX/TeX中作为“编程语言”。我需要在一个数组中存储多个vbox E或hbox E。它可能类似于“宏数组”

更多细节:我有一个可以排版歌曲的环境。我需要存储一些歌曲的段落作为宏\歌曲段落的参数(因此我不会对它们进行排版,只存储这些段落)。因为我不知道一首歌可以有多少段落,所以我需要一个数组。当环境关闭时,所有段落都将被排版,但它们将首先被测量,并计算每个段落的最佳位置(例如,一些段落可以在两列中一个放在另一个旁边,以使歌曲看起来更紧凑并节省一些空间)

任何想法都欢迎。
如果您了解LaTeX中的数组,请发布一些基本文档、教程或仅说明基本命令的链接。

这是一个数组,它如何在LaTeX中实现:

\documentclass{article}
\begin{document}

\newcounter{mycounter}
\setcounter{mycounter}{1}

% ary is any prefix you want, it should not exist as a command.

\expandafter\newcommand\csname ary\the\value{mycounter} \endcsname{myfirstelement}
\stepcounter{mycounter}
\expandafter\newcommand\csname ary\the\value{mycounter} \endcsname{mysecondelement}

\csname ary1 \endcsname

or

\newcounter{index}
\setcounter{index}{2}

\csname ary\the\value{index} \endcsname

\end{document}
通过LaTeX(LaTeX mydoc.tex或pdflatex mydoc.tex)运行此命令,您将看到输出

简要说明:这将创建两个命令(使用newcommand):ary1和ary2。需要
\expandafter
,因为
newcommand
不应定义
\csname
,而应定义由
\csname
创建的命令<代码>\endcsname
\expandafter
跳过下一个标记,在这种情况下,控制序列
\newcommand
在TeX看到
\newcommand
之前执行下一个命令。这意味着,TeX在newcommand行中看到的第一件事是
\csname
..
\endcsname
构造,TeX执行它,然后执行
\newcommand
,结果是
\csname
..
\endcsname
构造
\csname foo\endcsname
\foo
相同,但您可以在由
\csname
创建的命令中使用任何字符甚至空格


这不是小事。请参阅维克多·艾杰霍特(Victor Eijkhout)的名著《TeX by topic》:

要扩展帕特里克的答案,简短的答案是“否”。但是,由于它具有宏扩展,因此可以将其编程为具有阵列

这里是另一个例子,这个例子使用push和pop来表示“数组”。当
\type@pushcolour
,它将当前颜色保存到堆栈中<代码>\type@popcolour采用顶级颜色定义,并使用它:

\newcount\type@count
\def\type@pushcolour{%
  \xglobal\colorlet{foo\the\type@count}{.}%
\global\advance\type@count by1\relax}
\def\type@popcolour{%
  \global\advance\type@count by-1\relax%
\color{foo\the\type@count}}

(我从beamer包的源代码中改编了这段代码)

检查一下LaTeX的阵列实现。诚然,我只是瞥了一眼,所以我不知道它会有多有效。但是,如果您不必自己编写它…

您也可以查看数据工具包或expl3编程系统,以及“属性列表”数据类型。pgfkeys和pgffor可能也适用于您。它们是(便携式图形格式)软件包的一部分,但可以独立于所有图形内容使用

Luatex有Lua的表,它概括了数组。如果有标准乳胶对你不重要,考虑使用LuATEX胶乳。然后,您可以执行以下操作:

\def\lookup#1{\directlua {
    local array={1,2,4,8}; tex.print(array[#1])}}
\[ 2 \mapsto \lookup{2} \]
Luatex使用Latex有点不稳定,因为需要在Latex代码中转义所有类型的Lua字符。上下文有
\n个代码\停止luacode
宏来处理Lua代码定义,停止Lua代码调用的\ctxlua,我看不出为什么不能为Latex定义类似的内容。

该软件包允许将格式化数据输入元素 指二维或三维数组(或一维文件记录数组)

\documentclass{standalone}
\usepackage{readarray}

\def\data{% the data
1 15 14 4
10 11 8 5
7 6 9 12
16 2 3 13
}
\readarray\data\dataA[4,4] %read the data to \dataA

\begin{document}
value at (2,1) = \dataA[2,1] %access a specific field
\end{document}