質問

ラテックスに配列はありますか?私は型付け配列の方法を意味するものではありません。私は、「プログラミング言語」として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}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top