
tex4ht/make4ht를 더 많이 사용하면서 나만의 사용자 정의 컬렉션을 구축하고 있다는 것을 알게 되었습니다. 이를 정리하는 데 도움이 되도록 make4ht에 (여러) 사용자 정의 필터/domfilter를 포함하여 관리하는 권장 방법이 있습니까?
나는 (특히 domfilter의 경우) 다음을 build.lua
사용 하여 파일을 만들 수 있다는 것을 알고 있습니다.
local domfilter = require "make4ht-domfilter"
local process = domfilter {
-- do stuff here
return dom
end
}
Make:match("html$", process)
그런 다음 실행하십시오 make4ht -e build.lua
.
하지만 다른 작업을 수행하기 위해 몇 가지 다른 (dom) 필터를 갖고 싶다면 어떻게 해야 할까요? 이를 여러 파일로 분할하고 어떤 파일을 실행할지 지정할 수 있나요?
또한 .sty/.4ht 패키지 또는 .cfg 내에서 실행되도록 필터(사용자 정의 또는 '표준')를 지정할 수 있습니까? (이것이 보안 위험을 초래할 수 있다는 것을 알고 있습니다...)
여기에는 많은 질문이 있습니다. 죄송하지만 어떤 질문이라도 답변해 주시면 매우 환영하겠습니다.
답변1
불행하게도 TeX 측에서 빌드 순서를 수정하는 것은 불가능합니다. 모든 작업은 Lua 파일에서 수행되어야 합니다.
새로운 DOM 필터 모듈을 쉽게 정의할 수 있습니다. 다음 이름 구성표를 사용해야 합니다 domfilters/make4ht-<filtername>.lua
. 디렉토리 domfilters
는 현재 디렉토리에 위치할 수 있지만, 보편적으로 사용할 수 있도록 하려면 디렉토리의 로컬 TEXMF 트리에 위치시키는 것이 가장 좋습니다 scripts/lua/
. 예를 들어 내 시스템에서는 ~/texmf/script/lua/domfilters
또는 가 될 수 있습니다 ~/texmf/script/lua/make4ht/domfilters
.
DOM 필터 모듈은 DOM 개체를 가져와 수정한 다음 반환하는 함수를 내보내야 합니다. 보다기존 DOM 필터영감을 위해.
샘플 DOM 필터는 다음과 같습니다(이름 지정 ~/texmf/scripts/lua/make4ht/domfilters/make4ht-test.lua
).
return function(dom)
print "Hello world"
return dom
end
다음과 같이 빌드 파일에서 이 DOM 필터를 요구할 수 있습니다.
local domfilters = require "make4ht-domfilter"
local process = domfilters {"test"}
Make:match("html$", process)
여러 필터를 연결할 수 있습니다.
local process = domfilters {"test", "fixinlines"}
각 단계는 이전 필터에서 DOM 개체를 가져오므로 HTML 파일을 다시 구문 분석할 필요가 없습니다.
여러 프로젝트에서 빌드 시퀀스를 사용할 수 있도록 하려면 다음 두 가지 선택 사항이 있습니다.
- make4ht 구성 파일
- 새로운 확장
make4ht 구성 파일TeX4ht 구성 파일(확장자가 있는 TeX 파일)과는 다릅니다 .cfg
. 홈 디렉터리나 프로젝트 루트에 배치할 수 있는 특별한 Lua 빌드 파일입니다. 이름이 로 지정되어야 합니다 .make4ht
. 따라서 위의 빌드 파일 예제를 가져와서 이름을 바꾸고 .make4ht
프로젝트의 상위 디렉터리에 넣으면 자동으로 사용됩니다.
확장빌드 프로세스의 다양한 측면을 수정할 수 있습니다. make4ht/extensions
디렉토리 에 배치하고 이름을 로 지정해야 합니다 make4ht-ext-<filename>.lua
. 특히 modify_build
.
다음은 샘플 확장입니다 make4ht-ext-sample.lua
.
local M = {}
local filter = require "make4ht-domfilter"
function M.test(format)
print("hello format", format)
return true
end
function M.modify_build(make)
-- number of filters that should be moved to the beginning
print "hello modify build"
local process = filter {"test"}
make:match("html?$", process)
return make
end
return M
함수는 M.test
현재 출력 형식을 취하고 확장을 실행할지 여부를 결정합니다. 예를 들어 일부 확장은 HTML만 지원하므로 이 함수는 반환되고 false
전혀 사용되지 않습니다.
함수 M.modify_build
에는 빌드 파일과 유사한 코드가 포함될 수 있지만 일반 빌드 파일에서 사용되는 make4ht
전역 개체 대신 매개 변수로 전달되는 변수가 사용됩니다 .Make4ht
다음과 같은 f
매개변수를 사용하여 확장이 필요할 수 있습니다 .make4ht
make4ht -f html5+sample filename.tex
이 명령의 출력은 다음과 같습니다.
[STATUS] make4ht: Conversion started
[STATUS] make4ht: Input file: sample.tex
hello format html5
hello modify build
Hello world
[STATUS] make4ht: Conversion finished