¿Cuál es "la" raíz de Lua para los paquetes contextuales?

¿Cuál es "la" raíz de Lua para los paquetes contextuales?

Como autor del paquete, quiero escribir un módulo Lua que pueda encontrarse tanto en como lualatexen context.

El lualatexprototipo funciona razonablemente y estoy convencido de que esto también será cierto si lanzo el paquete.

Sin embargo, el contextprototipo no encuentra mis archivos, pero puedo forzarlo a que los encuentre especificando una LUAINPUTSvariable de entorno adecuada (que apunta al directorio desde el que se pueden encontrar mis archivos directamente).

Sin embargo, no entiendo si (o cómo) mi paquete funcionará en el estado "salvaje" donde se encuentra esta variable de entorno.noestablecido como en mi entorno de desarrollo.

La pregunta es esencialmente: ¿dónde debo colocar mis archivos para que contextpuedan requirehacerlo?

Esto es lo que creo que es un ejemplo mínimo de trabajo:

Supongamos que mi paquete reside en /tmp/luamodule/texmf/tex/generic/pgfplots/libs/foo/bar/xyz.lua. Esto se parece a mi vaga idea de que texmfserá el texmfpunto de entrada global, luego tengo mi paquete (directorios tex/generic/pgfplots/libs) y luego tengo una estructura de subdirectorios que se asemeja a mi paquete Lua ( foo/bar/xyz.lua).

El archivo del paquete xyz.luacontiene el paquete avanzado.

io.write("\nFOUND IT!\n")

Entonces tengo un archivo que contiene

\documentclass{standalone}

\directlua{require('foo.bar.xyz')}

\begin{document}

OK.
\end{document}

Procesando esto con

export LUAINPUTS="/tmp/luamodule/texmf/tex/generic/pgfplots//:"
lualatex xyz.tex

funciona: veo "LO ENCONTRÉ" en la salida de la consola.

A continuación, vuelvo a intentar lo mismo contexty escribo un archivo xyzcontext.texque contiene

\directlua{require('foo.bar.xyz')}
\starttext
OK.
\stoptext

Traduciendo esto con

export LUAINPUTS="/tmp/luamodule/texmf/tex/generic/pgfplots//:"
context xyzcontext

falla porque no puede encontrar el archivo Lua.

Sin embargo, funciona si escribo

export LUAINPUTS="/tmp/luamodule/texmf/tex/generic/pgfplots/libs/:"
context xyzcontext

La diferencia es que mi primera ruta LUAINPUTS contiene una inclusión recursiva ( //), mientras que la segunda contiene el directorio raíz preciso.

Ya he aprendido que contexthace las cosas de manera diferente en comparación con lualatex(no usa kpsedurante requirey maneja los períodos de manera diferente). Pero este problema nos hace preguntarnos: lualatexparece funcionar con rutas de archivos lua definidas de forma recursiva. A juzgar por las configuraciones de texmf.cnf enviadas con tex live, esperaría que mi esquema de nombres de directorio funcione. ¿Pero qué pasa con el contexto? ¿Encontrará mis archivos si no configuro dicha ruta raíz? Parece que este tipo de esquema de nombres funciona con la biblioteca de dibujo de gráficos de PGF (en ambos lualatexy context), pero realmente no veo por qué.

Incluso intenté copiar mis .luaarchivos en el árbol global de TL 2014 texmf(seguido de texhash), sin éxito.

Por lo tanto, mi pregunta: ¿dónde debo colocar mis .luaarchivos para que ambos lualatexpuedan contextencontrarlos?

relacionado: Mejores prácticas para módulos Lua

Respuesta1

Con el fin de tener una respuesta wiki de la comunidad que pueda ser votada para eliminar esta pregunta, y que pueda reformatear si recibe suficientes votos/solicitudes, aquí están los comentarios:

¿Ejecutó mtxrun --generate para recrear la base de datos de nombres de archivos? Eso debería hacer que los archivos en TEXMF estén disponibles para las rutinas de búsqueda de Context. – Philipp Gesang el 25 diciembre, 2014 en el 05:53

[... continúa] Además, el código de contexto rara vez llama a require() para cargar paquetes, generalmente solo para bibliotecas externas que no son TeX. En cambio, es más idiomático usar Environment.loadluafile() al final de Lua y \registerctxluafile de TeX. – Philipp Gesang el 25 diciembre, 2014 en el 05:53

@phg No conocía mtxrun --generate. Lo ejecuté ahora mismo sin ninguna diferencia aparente (es decir, todavía no encuentra el archivo). – Christian Feuersänger el 25 diciembre, 2014 en el 17:31

@phg, tu referencia a Environment.loadluafile es nueva para mí. ¿Es esa la solución? También recibí información de algún tipo de contexto de que dofile(resolvers.findfile("foo.bar.whatever.lua")) es (¿parte de?) una mejor práctica. Es cierto que esto sólo aumenta mi confusión sobre cómo escribir bibliotecas LUA que se supone deben usarse tanto desde lualatex como desde contexto. – Christian Feuersänger el 25 diciembre, 2014 en el 07:34

... tal vez una respuesta a mi pregunta podría ser una especie de cambio "si soy contexto si no soy lualatex ..." – Christian Feuersänger 25 diciembre 2014 en el 07:35, el autor Christian Feuersänger, fuente

Si el archivo no se encuentra después de --generate, ¿tal vez esté ubicado en el árbol incorrecto? Los módulos de Garden generalmente residen en texmf-modules, las cosas que instalas manualmente van en texmf-local. Eso suponiendo que estés usando los mínimos, por supuesto. Existen ciertas convenciones con respecto a la ubicación de los archivos. La mayoría de los archivos de módulos de terceros pertenecen a tex/context/third/${MODULE}/, scripts que se supone que deben llamarse desde mtxrun en ./scripts/context/lua/third/${MODULE}, pero yo no Creo que esa convención se aplica al realizar búsquedas de archivos. – Philipp Gesang el 27 diciembre, 2014 en el 01:36

Aquí hay una sugerencia para la búsqueda de rutas de depuración: Primero determine dónde almacena Context la información de su archivo. Por lo general, este es un directorio llamado luatex-cache/context bajo la raíz texmf-cache o texmf-var. Luego cree un archivo ficticio con un nombre único en algún lugar debajo de su archivo texmf-local/. Ahora ejecute mtxrun --generate y grep luatex-cache de forma recursiva para obtener el nombre del archivo ficticio. Si se encontró el archivo, aparecerá en una descripción del contenido del árbol (luatex-cache/context//trees/.lua). De lo contrario, Context no atraviesa la ubicación en absoluto. – Philipp Gesang el 27 diciembre, 2014 en el 01:44

Por cierto. uno de mis paquetes funciona en Context, Plain y Latex: bitbucket.org/phg/enigma/src. Acabo de verificar que colocar los archivos en los árboles respectivos debajo de texmf-local funciona bien. – Philipp Gesang el 27 diciembre, 2014 en el 01:55

@phg ¡gracias por tu paciencia y tiempo! ¡Eso lo resolvió! Coloqué el archivo en /home/ludewich/tl2014/texmf-dist/tex/generic/pgf/math/foo/ba‌​r, ejecuté mtxrun --generate y se indexó correctamente y se ejecutó mi mínimo. Pensé que había hecho lo mismo después de tu primer comentario, pero ¿quizás cometí algún error? Si escribe su sugerencia sobre mtxrun en una respuesta, la aceptaré con gusto. – Christian Feuersänger el 27 diciembre, 2014 en el 04:10

información relacionada