
lualatex
패키지 작성자로서 저는 및 에서 모두 찾을 수 있는 Lua 모듈을 작성하고 싶습니다 context
.
프로토 lualatex
타입은 합리적으로 작동하며 패키지를 출시하면 이것이 사실이 될 것이라고 확신합니다.
그러나 프로토타입은 내 파일을 찾지 못하지만 적절한 환경 변수(내 파일을 직접 찾을 수 있는 디렉터리를 가리킴)를 context
지정하여 프로토타입이 내 파일을 찾도록 강제할 수 있습니다 .LUAINPUTS
그러나 이 환경 변수가 있는 "야생"에서 내 패키지가 작동하는지(또는 어떻게) 이해할 수 없습니다.~ 아니다내 개발 환경과 동일하게 설정되었습니다.
질문은 본질적으로: 파일을 어디에 배치해야 context
합니까 require
?
다음은 최소한의 작업 예라고 생각되는 것입니다.
내 패키지가 /tmp/luamodule/texmf/tex/generic/pgfplots/libs/foo/bar/xyz.lua
. 이는 texmf
글로벌 texmf
진입점이 될 것이라는 나의 막연한 생각과 비슷합니다. 패키지(디렉토리 tex/generic/pgfplots/libs
)가 있고 Lua 패키지( )와 유사한 하위 디렉터리 구조가 있습니다 foo/bar/xyz.lua
.
패키지 파일에는 xyz.lua
고급 패키지가 포함되어 있습니다.
io.write("\nFOUND IT!\n")
그런 다음 다음을 포함하는 파일이 있습니다.
\documentclass{standalone}
\directlua{require('foo.bar.xyz')}
\begin{document}
OK.
\end{document}
이것을 처리
export LUAINPUTS="/tmp/luamodule/texmf/tex/generic/pgfplots//:"
lualatex xyz.tex
작동: 콘솔 출력에 "FOUND IT"가 표시됩니다.
다음으로 동일한 작업을 다시 시도 하고 다음을 포함하는 context
파일을 작성합니다.xyzcontext.tex
\directlua{require('foo.bar.xyz')}
\starttext
OK.
\stoptext
이것을 번역하면
export LUAINPUTS="/tmp/luamodule/texmf/tex/generic/pgfplots//:"
context xyzcontext
Lua 파일을 찾을 수 없기 때문에 실패합니다.
그러나 내가 쓰면 작동합니다
export LUAINPUTS="/tmp/luamodule/texmf/tex/generic/pgfplots/libs/:"
context xyzcontext
차이점은 첫 번째 LUAINPUTS 경로에는 재귀적 포함( //
)이 포함되어 있고 두 번째 경로에는 정확한 루트 디렉터리가 포함되어 있다는 것입니다.
나는 그것이 ( 기간을 사용하지 않고 기간을 다르게 처리하는) context
것과 다르게 일을 한다는 것을 이미 배웠습니다 . 하지만 이 문제로 인해 우리는 다음과 같은 의문을 갖게 되었습니다. 재귀적으로 정의된 lua 파일 경로에서 작동하는 것 같습니다. tex live와 함께 제공되는 texmf.cnf 구성으로 판단하면 내 디렉터리 명명 체계가 작동할 것으로 예상됩니다. 하지만 맥락은 어떻습니까!? 그러한 루트 경로를 설정하지 않으면 내 파일을 찾을 수 있습니까? 이런 종류의 명명 체계는 PGF의 그래프 그리기 lib( 및 둘 다)에서 작동하는 것 같지만 실제로 이유는 모르겠습니다.lualatex
kpse
require
lualatex
lualatex
context
.lua
심지어 내 파일을 TL 2014 글로벌 texmf
트리(뒤에 )에 복사하려고 시도했지만 texhash
성공하지 못했습니다.
따라서 제 질문은: 두 파일을 모두 찾을 수 있도록 파일을 어디에 배치 해야 합니까 .lua
?lualatex
context
관련된: Lua 모듈 모범 사례
답변1
이 질문을 해결하기 위해 찬성표를 던질 수 있고 충분한 찬성표/요청을 얻으면 다시 형식화할 수 있는 커뮤니티 위키 답변을 얻기 위해 다음과 같은 의견이 있습니다.
파일 이름 데이터베이스를 다시 생성하기 위해 mtxrun --generate를 실행하셨습니까? 그러면 TEXMF의 파일을 Context의 조회 루틴에서 사용할 수 있게 됩니다. — Philipp Gesang 25 dec.
[… 계속] 또한 컨텍스트 코드는 패키지를 로드하기 위해 require()를 거의 호출하지 않으며 일반적으로 TeX가 아닌 외부 라이브러리에 대해서만 호출합니다. 대신 Lua 끝에서 Environment.loadluafile()을 사용하고 TeX에서 \registerctxluafile을 사용하는 것이 더 관용적입니다. — Philipp Gesang 25 dec.
@phg 나는 mtxrun --generate를 몰랐습니다. 나는 지금 당장 아무런 뚜렷한 차이 없이 실행했습니다(즉, 여전히 파일을 찾지 못합니다). — Christian Feuersänger 25 dec.
@phg Environment.loadluafile에 대한 참조는 나에게 새로운 것입니다. 그게 해결책인가요? 나는 또한 dofile(resolvers.findfile("foo.bar.whatever.lua"))이 (?의 일부) 모범 사례라는 일부 컨텍스트 담당자로부터 의견을 받았습니다. 물론 이것은 lualatex와 컨텍스트 모두에서 사용되는 LUA 라이브러리를 작성하는 방법에 대한 혼란을 증가시킬 뿐입니다. — Christian Feuersänger 25 dec.
... 아마도 내 질문에 대한 대답은 "내가 lualatex라면 다른 맥락이라면 ..." – Christian Feuersänger 25 dec. 142014-12-25 17:35
--generate 이후에 파일을 찾을 수 없다면 파일이 잘못된 트리에 있는 것일 수도 있습니다. Garden의 모듈은 일반적으로 texmf-modules에 있으며 수동으로 설치하는 항목은 texmf-local 아래에 있습니다. 물론 Minimal을 사용한다고 가정합니다. 파일 위치에 관한 특정 규칙이 있습니다. 타사 모듈의 대부분의 파일은 tex/context/third/${MODULE}/, 즉 ./scripts/context/lua/third/${MODULE} 아래의 mtxrun에서 호출되어야 하는 스크립트에 속하지만 저는 그렇지 않습니다. 파일 조회를 수행할 때 규칙이 적용된다고 생각하세요. — Philipp Gesang 27 dec.
경로 조회 디버깅에 대한 제안은 다음과 같습니다. 먼저 Context가 파일 정보를 저장하는 위치를 결정합니다. 일반적으로 이는 루트 texmf-cache 또는 texmf-var 아래에 있는 luatex-cache/context라는 디렉터리입니다. 그런 다음 texmf-local/ 아래 어딘가에 고유한 이름을 가진 더미 파일을 만듭니다. 이제 mtxrun --generate를 실행하고 더미 파일 이름에 대해 luatex-cache를 반복적으로 grep하십시오. 파일이 발견되면 트리 내용 설명(luatex-cache/context//trees/.lua)에 표시됩니다. 그렇지 않은 경우 위치는 컨텍스트에 의해 전혀 탐색되지 않습니다. — Philipp Gesang 27 dec.
그런데. 내 패키지 중 하나가 Context, Plain 및 Latex에서 작동합니다(bitbucket.org/phg/enigma/src). 방금 texmf-local 아래의 각 트리에 파일을 배치하는 것이 제대로 작동하는지 확인했습니다. — Philipp Gesang 27 dec.
@phg 인내심과 시간을 내주셔서 감사합니다! 그걸로 해결됐어! 파일을 /home/ludewich/tl2014/texmf-dist/tex/generic/pgf/math/foo/bar에 넣고 mtxrun --generate를 실행했는데 제대로 인덱싱되었고 최소한의 실행이 이루어졌습니다. 나는 당신의 첫 번째 댓글 이후에도 똑같은 일을 했다고 생각했는데, 혹시 제가 실수를 한 것은 아닐까요? mtxrun에 관한 힌트를 답변에 적어주시면 기꺼이 받아들이겠습니다. — Christian Feuersänger 27 dec.