Ras*_*sto 17 arrays latex tex hbox
LaTeX中有阵列吗?我不是指排版数组的方法.我的意思是将数组作为LaTeX/TeX中的数据结构作为"编程语言".我需要在一个数组中存储一些vbox-es或hbox-es.它可能类似于"一系列宏".
更多细节:我有一个应该排版歌曲的环境.我需要将一些歌曲的段落作为参数存储到我的macro\songparagraph中(因此我不会对它们进行排版,只需存储这些段落).由于我不知道在一首特定歌曲中可以有多少段落,我需要一个阵列.当环境关闭时,所有段落都将被排版 - 但是它们将首先被测量并且将计算每个段落的最佳位置(例如,一些段落可以放在另一列的两列中以使歌曲看起来更紧凑,节省一些空间).
任何想法都会受到欢迎.如果您了解LaTeX中的数组,请发布一些基本文档,教程或仅说明基本命令的链接.
top*_*kip 10
这是一个如何在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}
Run Code Online (Sandbox Code Playgroud)
通过LaTeX(latex mydoc.tex或pdflatex mydoc.tex)运行它,你会看到输出.
一个简短的解释:这会创建两个命令(使用newcommand):ary1和ary2.这\expandafter是必需的,因为newcommand不应该定义\csname由\csname... 创建的命令\endcsname.\expandafter跳过下一个标记,在这种情况下是控制序列,\newcommand并在TeX看到之前执行下一个命令\newcommand.这意味着,TeX看到的新命令行中的第一件事是\csname...... \endcsname构造,TeX执行它然后\newcommand用\csname... \endcsname构造的结果执行. \csname foo\endcsname是相同的\foo,但您可以在\csname... 创建的命令中使用任何字符甚至空格\endcsname.
这不是微不足道的.请参阅Victor Eijkhout的伟大着作"TeX by topic":http://eijkhout.net/texbytopic/texbytopic.html
Luatex有Lua的表,这些表可以概括数组。如果拥有标准乳胶对您并不重要,请考虑将Luatex与乳胶一起使用。然后,您可以执行以下操作:
\def\lookup#1{\directlua {
local array={1,2,4,8}; tex.print(array[#1])}}
\[ 2 \mapsto \lookup{2} \]
Run Code Online (Sandbox Code Playgroud)
由于需要在Latex代码中转义各种Lua字符,因此Luatex与Latex有点不同。Context具有\startluacode ... \stopluacode宏来处理Lua代码定义和\ctxluaLua代码调用,并且我看不出无法为Latex定义类似这些的任何原因。
| 归档时间: |
|
| 查看次数: |
11463 次 |
| 最近记录: |