20

LaTeXにアレイはありますか?配列を植字する方法を意味するのではありません。「プログラミング言語」としてのLaTeX/TeXのデータ構造としての配列を意味します。いくつかのvbox-esまたはhbox-esを配列に格納する必要があります。「マクロの配列」のようなものかもしれません。

詳細:曲を植字する必要がある環境があります。マクロ\songparagraphへの引数として指定されたいくつかの曲の段落を保存する必要があります(したがって、それらをタイプセットせず、それらの段落を保存するだけです)。1つの特定の曲にいくつの段落を含めることができるかわからないので、このための配列が必要です。環境が閉じられると、すべての段落が植字されますが、最初に測定され、各段落の最適な配置が計算されます(たとえば、一部の段落を2列に並べて、曲の外観を整えることができます)よりコンパクトになり、スペースを節約できます)。

どんなアイデアでも大歓迎です。LaTeXのアレイについて知っている場合は、いくつかの基本的なドキュメント、チュートリアルへのリンクを投稿するか、基本的なコマンドを説明してください。

4

7 に答える 7

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}

これをLaTeX(latexmydoc.texまたはpdflatexmydoc.tex)で実行すると、出力が表示されます。

簡単な説明:これにより、ary1とary2の2つのコマンド(newcommandを使用)が作成されます。定義する必要はありませんが、 ...によって作成されたコマンドであるため、\expandafterが必要です。次のトークン(この場合は制御シーケンス)をジャンプして、TeXがを認識する前に次のコマンドを実行します。つまり、新しいコマンドラインでTeXが最初に認識するのは...コンストラクトであり、TeXはそれを実行してから、 ...コンストラクトの結果を使用して実行します。 はと同じですが、 ...によって作成されたコマンドでは、任意の文字またはスペースを使用できます。newcommand\csname\csname\endcsname\expandafter\newcommand\newcommand\csname\endcsname\newcommand\csname\endcsname\csname foo\endcsname\foo\csname\endcsname

これは些細なことではありません。ビクター・アイフハウトの素晴らしい本「トピック別のTeX」を参照してください:http: //eijkhout.net/texbytopic/texbytopic.html

于 2010-04-15T19:46:30.667 に答える
5

Luatexには、配列を一般化するLuaのテーブルがあります。標準のラテックスを使用することが重要でない場合は、Luatexとラテックスの使用を検討してください。次に、次のようなことを行うことができます。

\def\lookup#1{\directlua {
    local array={1,2,4,8}; tex.print(array[#1])}}
\[ 2 \mapsto \lookup{2} \]

Luatexは、LaTeXコード内のすべての種類のLua文字をエスケープする必要があるため、LaTeXでは少し不安定です。コンテキストには\startluacode ... \stopluacode、Luaコード定義を処理するためのマクロと\ctxluaLuaコード呼び出しのためのマクロがあり、これらのようなものをラテックス用に定義できなかった理由はわかりません。

于 2010-04-19T12:23:35.623 に答える
4

pgfkeysとpgfforもあなたのために働くかもしれません。これらはpgf(ポータブルグラフィックス形式)パッケージの一部ですが、すべてのグラフィックスのものとは独立して使用できます。

于 2010-04-16T12:41:33.367 に答える
3

パトリックの答えを拡張するために、短い答えは「いいえ」です。ただし、マクロ展開があるため、配列を持つようにプログラムできます。

別の例を次に示します。これは、「配列」にプッシュとポップを使用しています。が\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}}

(私はこのコードをビーマーパッケージのソースから適応させました)

于 2010-04-15T20:04:22.430 に答える
3

また、datatoolパッケージやexpl3プログラミングシステム、および「プロパティリスト」データ型のようなものを見ることができます。

于 2010-04-15T21:08:00.213 に答える
2

LaTeXの配列を実装するArrayjobをチェックしてください。確かに、私はそれを覗いただけなので、それがどれほど効果的かはわかりません。しかし、自分で書く必要がなければ...

于 2010-04-15T20:51:03.290 に答える
1

readarrayパッケージを使用すると、フォーマットされたデータを2Dまたは3D配列(または1Dファイルレコード配列)の要素に入力できます。

\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}
于 2018-07-26T09:36:51.843 に答える