Frage

Gibt es Arrays in LaTeX? Ich meine nicht die Art und Weise Arrays zu setzen. I mittlerer Arrays als die Datenstruktur in LaTeX / tex als „Programmiersprache“. Ich brauche eine Reihe von vbox-ihm oder hbox-es in einem Array zu speichern. Es kann so etwas wie „eine Reihe von Makros“ sein.

Weitere Informationen: Ich habe eine Umgebung, die Songs setzen sollte. Ich brauche ein paar Songs speichern Absätze als Argumente für meine Makro \ songparagraph gegeben (so dass ich sie nicht setzen wird, speichern nur diese Absätze). Wie ich weiß nicht, wie viele Absätze in einem bestimmten Song sein kann muss ich ein Array für diese. Wenn die Umgebung geschlossen ist, alle Absätze werden typeset sein - aber sie werden zunächst für jeden Absatz und die beste Platzierung gemessen werden (beispielsweise berechnet werden, können einige Absätze eine Seite der anderen in zwei Spalten gesetzt werden, um den Song aussehen zu lassen kompakte und sparen Sie etwas Raum).

würde Irgendwelche Ideen willkommen. Bitte, wenn Sie über Arrays in LaTeX wissen, schreiben Sie einen Link auf einige grundlegende Dokumentation, Tutorial oder Zustand grundlegende Befehle.

War es hilfreich?

Lösung

Schauen Sie sich arrayjob die Geräte-Arrays für LaTeX. Zwar habe ich nur an sie gucke, so dass ich weiß nicht, wie effektiv es sein wird. Aber, wenn Sie müssen es selbst nicht schreiben ...

Andere Tipps

Dies ist ein Array, wie es in LaTeX umgesetzt werden könnte:

\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}

Führen Sie dies durch LaTeX (Latex mydoc.tex oder pdflatex mydoc.tex) und Sie sehen die Ausgabe.

Eine kurze Erklärung: Dies schafft zwei Befehle (mit newcommand): ARY1 und ARY2. Die \expandafter ist erforderlich, weil newcommand nicht \csname aber der Befehl von \csname ... \endcsname erstellt definieren soll. \expandafterjumps über das nächste Token in diesem Fall der Steuersequenz \newcommand und führt den nächsten Befehl, bevor die TeX \newcommand sieht. Das heißt, sieht die als erste in den newcommand-Linien TeX ist das \csname ... \endcsname Konstrukt, TeX führt es aus und führt dann \newcommand mit dem Ergebnis der \csname ... \endcsname konstruieren. \csname foo\endcsname ist die gleiche wie \foo, aber Sie können alle Zeichen oder sogar Räume in dem durch \csname ... \endcsname erstellt Befehl verwenden.

Das ist nicht trivial. Sehen Sie das große Buch "TeX Motiv" von Victor Eijkhout: http://eijkhout.net/texbytopic/texbytopic. html

LuaTeX hat Lua Tabellen, die Arrays verallgemeinern. Wenn mit Standard-Latex Ihnen nicht wichtig ist, sollten Sie LuaTeX mit Latex verwendet wird. Sie können dann solche Dinge tun, wie:

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

LuaTeX ist ein bisschen flockig mit Latex, wegen der Notwendigkeit, alle Arten von Lua Zeichen im Latex-Code zu entkommen. Context hat \startluacode ... \stopluacode Makros Lua Codedefinitionen und \ctxlua für Lua Code Anrufe zu handhaben, und ich kann keinen Grund sehen, warum so etwas wie diese könnten nicht für Latex definiert werden.

pgfkeys und pgffor könnte auch für Sie arbeiten. Sie sind Teil des pgf (portable Grafikformat) Pakets, aber sie können unabhängig von allen genutzt werden die Grafik stopfen.

Um auf Patrick Antwort zu erweitern, die kurze Antwort ist „Nein“. Da es jedoch Makroerweiterung hat, kann es so programmiert werden, Arrays zu haben.

Hier ist ein weiteres Beispiel, mit diesem ein Push und Pop für „Arrays“. Wenn \type@pushcolour genannt wird, speichert es die aktuelle Farbe auf den Stapel. \type@popcolour nimmt die obere Farbdefinition, und verwendet es:

\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}}

(I angepasst diesen Code von der Quelle für das Beamer-Paket)

Sie könnten auch an so etwas wie das Paket aussehen Datatool oder das expl3 Programmiersystem und den „Eigenschaftsliste“ Datentyp.

Readarray Paket ermöglicht eine Eingabe zu formatierten Daten in Elemente ein 2-D oder 3-D-Array (oder einen 1-D-Datei-Datensatz-Array).

\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}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top