Domanda

Ci sono le matrici in LaTeX? Non intendo il modo di comporre gli array. Ho array media come la struttura dei dati in LaTeX / TeX come un "linguaggio di programmazione". Ho bisogno di memorizzare un numero di VBOX-ES o HBOX-es in un array. Potrebbe essere qualcosa di simile a "una serie di macro".

Più informazioni: Ho un ambiente che dovrebbe comporre canzoni. Ho bisogno di memorizzare i paragrafi alcune canzoni passati come argomenti alla mia macro \ songparagraph (in modo da non li comporre, basta memorizzare tali punti). Come io non so quanti punti può essere in una canzone particolare, ho bisogno di un array per questo. Quando l'ambiente è chiuso, tutti i paragrafi venga scritto - ma saranno prima misurato e il miglior piazzamento per ogni paragrafo saranno computerizzata (ad esempio, alcuni paragrafi possono essere messi uno a parte l'altro in due colonne per rendere il look canzone più compatta e risparmiare un po 'di spazio).

Tutte le idee sarebbe il benvenuto. Per favore, se sai di array in LaTeX, postare un link ad alcuni di documentazione, tutorial o semplicemente statali comandi di base di base.

È stato utile?

Soluzione

; arrayjob che implementa le matrici per LaTeX. Certo, ho sbirciato solo in esso, in modo da non so quanto sia efficace sarà. Ma, se non c'è bisogno di scrivere voi stessi ...

Altri suggerimenti

Questo è un array come potrebbe essere implementato in 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}

Esegui questo attraverso LaTeX (mydoc.tex lattice o pdflatex mydoc.tex) e si vede l'uscita.

Una breve spiegazione: questo crea due comandi (con newcommand): ary1 e ary2. Il \expandafter è necessario perché newcommand non dovrebbe definire \csname ma il comando creato da \csname ... \endcsname. \expandafterjumps oltre il token successivo, in questo caso il controllo di sequenza \newcommand ed esegue il comando successivo prima TeX vede il \newcommand. Ciò significa che, la prima cosa che nelle newcommand linee TeX vede è il costrutto \csname ... \endcsname, TeX lo esegue e poi esegue \newcommand con il risultato del costrutto \csname ... \endcsname. \csname foo\endcsname è lo stesso di \foo, ma è possibile utilizzare tutti gli spazi di carattere o anche nel comando creato da \csname ... \endcsname.

Questa non è banale. Vedere il grande libro "TeX per argomento" da Victor Eijkhout: http://eijkhout.net/texbytopic/texbytopic. html

LuaTEX ha tavoli di Lua, che generalizzano gli array. Se avere lattice standard non è importante per voi, considerare l'utilizzo di LuaTEX con lattice. È quindi possibile fare cose come:

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

LuaTEX è un po 'traballante con Latex, a causa della necessità di fuggire tutti i tipi di caratteri Lua nel codice Latex. Contesto deve macro \startluacode ... \stopluacode per gestire le definizioni di codice Lua, e \ctxlua per le chiamate di codice Lua, e non riesco a vedere alcuna ragione per cui non può essere definito qualcosa come questi per lattice.

pgfkeys e pgffor potrebbe anche funzionare per voi. Si parte Non Sei del pacchetto PGF (formato grafico portatile), ma possono essere utilizzati in modo indipendente di tutti la grafica roba.

Per espandere sulla risposta di Patrick, la risposta breve è "No". Tuttavia, come ha macro espansione, può essere programmato per avere matrici.

Ecco un altro esempio, questa volta utilizzando push e pop per "array". Quando \type@pushcolour si chiama, si salva il colore corrente al catasta. \type@popcolour prende la definizione superiore di colore, e l'utilizza:

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

(Ho adattato questo codice sorgente per il pacchetto beamer)

Si potrebbe anche guardare a qualcosa come il pacchetto Datatool o il sistema di programmazione expl3, e la "lista proprietà" tipo di dati.

scroll top