ラテックスには配列データ構造がありますか?
質問
ラテックスに配列はありますか?私は型付け配列の方法を意味するものではありません。私は、「プログラミング言語」としてLaTex/Texのデータ構造としての配列を意味します。いくつかのVbox-esまたはHbox-esを配列に保存する必要があります。 「マクロの配列」のようなものかもしれません。
詳細:曲をタイプセットする環境があります。 Macro songparagraphの引数として与えられた曲の段落をいくつか保存する必要があります(したがって、それらを入力せず、それらの段落を保存するだけです)。特定の曲にある段落がいくつあるかわからないので、このために配列が必要です。環境が閉じられると、すべての段落がタイプセットされますが、最初に測定され、各段落の最適な配置が計算されます(たとえば、いくつかの段落は2つの列に一方を脇に置くことができます。よりコンパクトでスペースを節約します)。
どんなアイデアも大歓迎です。 LaTexの配列について知っている場合は、基本的なドキュメント、チュートリアル、または基本コマンドのみへのリンクを投稿してください。
解決
チェックアウト arrayjob ラテックスの配列を実装します。確かに、私はそれを覗いただけなので、それがどれほど効果的かはわかりません。しかし、あなたがそれを自分で書く必要がないなら...
他のヒント
これは、ラテックスで実装する方法の配列です。
\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)で実行すると、出力が表示されます。
簡単な説明:これにより、2つのコマンド(NewCommandを使用)が作成されます。ARY1とARY2。 \expandafter
必要なので newcommand
定義すべきではありません \csname
しかし、によって作成されたコマンド \csname
... \endcsname
. \expandafter
次のトークン、この場合はコントロールシーケンスをジャンプします \newcommand
Texが表示される前に次のコマンドを実行します \newcommand
. 。つまり、Texが見ているNewCommand-Linesで最初のことは \csname
...\endcsname
コンストラクト、Texはそれを実行してから実行します \newcommand
の結果と \csname
...\endcsname
構成。 \csname foo\endcsname
と同じです \foo
, 、ただし、作成されたコマンド内の任意の文字またはスペースを使用できます \csname
...\endcsname
.
これは些細なことではありません。 Victor Eijkhoutの素晴らしい本「Topy by Topic」を参照してください: http://eijkhout.net/texbytopic/texbytopic.html
lutexには、配列を一般化するLuaのテーブルがあります。標準のラテックスを持っていることがあなたにとって重要でない場合は、LutexをLaTexで使用することを検討してください。その後、次のようなことを行うことができます。
\def\lookup#1{\directlua {
local array={1,2,4,8}; tex.print(array[#1])}}
\[ 2 \mapsto \lookup{2} \]
Lutexは、LaTexコードのあらゆる種類のLUA文字を逃れる必要があるため、LaTexで少しフレーク状です。コンテキストにはあります \startluacode ... \stopluacode
LUAコード定義を処理するマクロ、および \ctxlua
LUAコードコールの場合、これらのようなものをLaTexで定義できなかった理由はわかりません。
pgfkeysとpgfforもあなたのために働くかもしれません。彼らはの一部です PGF (Portable Graphics Format)パッケージですが、それらはすべてのグラフィックスのものとは独立して使用できます。
パトリックの答えを拡張するために、短い答えは「いいえ」です。ただし、マクロ拡張があるため、配列を使用するようにプログラムできます。
別の例は、「アレイ」にプッシュとポップを使用している別の例です。いつ \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}}
(ビーマーパッケージのソースからこのコードを適応させました)
また、DataToolパッケージやExpl3プログラミングシステムのようなもの、「プロパティリスト」データタイプを見ることもできます。
ReadArray パッケージを使用すると、フォーマットされたデータを2Dまたは3D配列(または1-Dファイルレコード配列)の要素に入力できます。
\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}