Pregunta

¿Hay matrices en látex? No me refiero a la manera de componer matrices. Me matrices medias como la estructura de datos en LaTeX / TeX como un "lenguaje de programación". Necesito almacenar un número de VBOX-ES-ES hbox o en una matriz. Puede ser algo así como "un conjunto de macros".

Más detalles: Tengo un ambiente que deben componer canciones. Necesito almacenar los párrafos algunas canciones dados como argumentos a mi macro \ songparagraph (así que no componer ellos, simplemente almacenar esos párrafos). Como no sé cuántos puntos puede estar en una canción en particular que necesito un arreglo para esto. Cuando el ambiente se cierra, todos los párrafos serán composición tipográfica - pero serán medidos primero y se computará la mejor colocación para cada párrafo (por ejemplo, algunos párrafos se pueden poner uno a un lado del otro en dos columnas para hacer la mirada canción más compacto y ahorrar algo de espacio).

Cualquier idea sería bienvenido. Por favor, si usted sabe acerca de las matrices en látex, enviar un enlace a algunos de documentación, tutoriales o estatales simplemente comandos básicos básicos.

¿Fue útil?

Solución

Arrayjob que implementa matrices para LaTeX. Es cierto que sólo he asomé a él, así que no sé cómo será su eficacia. Sin embargo, si usted no tiene que escribir usted mismo ...

Otros consejos

Esta es una matriz cómo se podría implementar en 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}

Ejecutar este a través del látex (látex o mydoc.tex pdflatex mydoc.tex) y se ve la salida.

Una breve explicación: esto crea dos comandos (con newcommand): ary1 y ary2. El \expandafter es necesario porque newcommand no debe definir \csname pero el comando creado por \csname ... \endcsname. \expandafterjumps más de la siguiente muestra, en este caso la secuencia de control \newcommand y ejecuta el siguiente comando antes de TeX ve el \newcommand. Eso significa que, a primera hora de la newcommand líneas TeX ve es el constructo \csname ... \endcsname, TeX ejecuta y luego ejecuta \newcommand con el resultado de la construcción ... \csname \endcsname. \csname foo\endcsname es la misma que \foo, pero se puede utilizar cualquier espacio de carácter o incluso en el comando creado por \csname ... \endcsname.

Esto no es trivial. Ver el gran libro "TeX por tema" de Victor Eijkhout: http://eijkhout.net/texbytopic/texbytopic. html

LuaTeX tiene mesas de LUA, que generalizan matrices. Si tener látex estándar no es importante para usted, considere el uso LuaTeX con látex. A continuación, puede hacer cosas como:

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

LuaTeX es un poco escamosa con látex, debido a la necesidad de escapar de todo tipo de personajes Lua en el código de látex. Contexto tiene macros \startluacode ... \stopluacode para manejar Lua definiciones de códigos, y \ctxlua para LUA llamadas codificadas, y no puedo ver ninguna razón por qué algo como estos no se podría definir de látex.

pgfkeys y pgffor también podrían funcionar para usted. Son parte del paquete PGF (formato de gráficos portátiles), pero se pueden utilizar de forma independiente de todos los gráficos cosas.

Para ampliar la respuesta de Patrick, la respuesta corta es "No". Sin embargo, ya que tiene la expansión de macros, que puede ser programado para tener arrays.

Aquí hay otro ejemplo, esta vez usando empuje y el pop de "conjuntos". Cuando \type@pushcolour se llama, se ahorra el color actual en la pila. \type@popcolour toma la definición del color de la parte superior, y lo utiliza:

\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 adaptado este código de la fuente para el paquete beamer)

También podría mirar algo como el paquete de Datatool o el sistema de programación expl3, y la lista de "propiedad" tipo de datos.

El readarray paquete le permite a uno los datos de entrada formateados en elementos de una matriz 2-D o 3-D (o una matriz de archivos ficha 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}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top