Qual é "a" raiz Lua para pacotes de contexto?

Qual é "a" raiz Lua para pacotes de contexto?

Como autor do pacote, quero escrever um módulo Lua que possa ser encontrado por lualatexe context.

O lualatexprotótipo funciona razoavelmente e estou convencido de que isso também será verdade se eu lançar o pacote.

No entanto, o contextprotótipo não encontra meus arquivos, mas posso forçá-lo a encontrá-los especificando uma LUAINPUTSvariável de ambiente adequada (que aponta para o diretório no qual meus arquivos podem ser encontrados diretamente).

Porém, não entendo se (ou como) meu pacote irá funcionar no "selvagem" onde esta variável de ambiente estánãodefinido como no meu ambiente de desenvolvimento.

A questão é essencialmente: onde devo colocar meus arquivos para que contextpossam require?

Aqui está o que acredito ser um exemplo mínimo de trabalho:

Vamos supor que meu pacote resida em /tmp/luamodule/texmf/tex/generic/pgfplots/libs/foo/bar/xyz.lua. Isso se assemelha à minha vaga ideia de que texmfserá o texmfponto de entrada global, então eu tenho meu pacote (diretórios tex/generic/pgfplots/libs) e então tenho uma estrutura de subdiretórios semelhante ao meu pacote Lua ( foo/bar/xyz.lua).

O arquivo do pacote xyz.luacontém o pacote avançado

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

Então eu tenho um arquivo contendo

\documentclass{standalone}

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

\begin{document}

OK.
\end{document}

Processando isso com

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

funciona: vejo "FOUND IT" na saída do console.

Em seguida, tento fazer o mesmo novamente contexte escrevo um arquivo xyzcontext.texcontendo

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

Traduzindo isso com

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

falha porque não consegue encontrar o arquivo Lua.

No entanto, funciona se eu escrever

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

A diferença é que meu primeiro caminho LUAINPUTS contém um include recursivo ( //), enquanto o segundo contém o diretório raiz preciso.

Já aprendi que contextfaz as coisas de maneira diferente em comparação com lualatex(não usa kpsedurante requiree lida com os períodos de maneira diferente). Mas esse problema nos permite pensar: lualatexparece funcionar com caminhos de arquivo lua definidos recursivamente. A julgar pelas configurações do texmf.cnf fornecidas com o tex live, espero que meu esquema de nomenclatura de diretório funcione. Mas e o contexto!? Ele encontrará meus arquivos se eu não definir esse caminho raiz? Parece que esse tipo de esquema de nomenclatura funciona com a biblioteca de desenho gráfico do PGF (em ambos lualatexe context), mas realmente não vejo por quê.

Até tentei copiar meus .luaarquivos para a árvore global do TL 2014 texmf(seguido por texhash) - sem sucesso.

Assim, minha pergunta: onde devo colocar meus .luaarquivos para que ambos lualatexpossam contextencontrá-los?

relacionado: Melhores práticas para módulos Lua

Responder1

Para ter uma resposta wiki da comunidade que possa ser votada positivamente para eliminar esta questão, e que eu possa reformatar se obtiver votos positivos/solicitações suficientes, aqui estão os comentários:

Você executou mtxrun --generate para recriar o banco de dados de nomes de arquivos? Isso deve disponibilizar os arquivos do TEXMF para as rotinas de pesquisa do Context. – Philipp Gesang 25/12/14 às 15:53

[…continuação] Além disso, o código de contexto raramente chama require() para carregar pacotes, geralmente apenas para bibliotecas externas não-TeX. Em vez disso, é mais idiomático usar environment.loadluafile() no final de Lua e \registerctxluafile no TeX. – Philipp Gesang 25/12/14 às 15:53

@phg Eu não conhecia mtxrun --generate. Executei agora mesmo sem nenhuma diferença aparente (ou seja, ainda não encontra o arquivo). – Christian Feuersänger 25/12/14 às 17:31

@phg sua referência a environment.loadluafile é nova para mim. Essa é a solução? Também recebi informações de algum cara do contexto que dofile(resolvers.findfile("foo.bar.whatever.lua")) é (parte de?) uma prática recomendada. É certo que isso apenas aumenta minha confusão sobre como escrever bibliotecas LUA que deveriam ser usadas tanto no lualatex quanto no contexto. – Christian Feuersänger 25/12/14 às 17:34

... talvez uma resposta à minha pergunta possa ser uma espécie de mudança "se eu sou contexto, se eu sou lualatex ..."

Se o arquivo não for encontrado após --generate, talvez ele esteja localizado na árvore errada? Os módulos do Garden geralmente residem nos módulos texmf, coisas que você instala manualmente vão para texmf-local. Isso presumindo que você esteja usando os Mínimos, é claro. Existem certas convenções relativas à localização dos arquivos. A maioria dos arquivos de módulos de terceiros pertencem a tex/context/third/${MODULE}/, scripts que deveriam ser chamados de mtxrun em ./scripts/context/lua/third/${MODULE}, mas eu não acho que essa convenção é aplicada ao fazer pesquisas de arquivos. – Philipp Gesang 27 de dezembro de 2014 às 11h36

Aqui está uma sugestão para depurar a pesquisa de caminho: Primeiro determine onde o Context armazena as informações do arquivo. Geralmente este é um diretório chamado luatex-cache/context sob a raiz texmf-cache ou texmf-var. Em seguida, crie um arquivo fictício com um nome exclusivo em algum lugar sob seu arquivo texmf-local/. Agora execute mtxrun --generate e grep o luatex-cache recursivamente para o nome do arquivo fictício. Se o arquivo for encontrado ele aparecerá em uma descrição do conteúdo da árvore (luatex-cache/context//trees/.lua). Caso contrário, o local não será atravessado pelo Contexto. – Philipp Gesang 27 de dezembro de 2014 às 11h44

Por falar nisso. um dos meus pacotes funciona em Context, Plain e Latex: bitbucket.org/phg/enigma/src - acabei de verificar que colocar os arquivos nas respectivas árvores sob o texmf-local funciona perfeitamente. – Philipp Gesang 27 de dezembro de 2014 às 11h55

@phg obrigado pela sua paciência e tempo! Isso resolveu! Coloquei o arquivo em /home/ludewich/tl2014/texmf-dist/tex/generic/pgf/math/foo/ba‌​r, executei mtxrun --generate e ele foi indexado corretamente e minha execução mínima. Achei que tinha feito o mesmo depois do seu primeiro comentário, mas talvez tenha cometido algum erro? Se você escrever sua dica sobre mtxrun em uma resposta, terei prazer em aceitá-la. – Christian Feuersänger 27 de dezembro de 2014 às 14h10

informação relacionada