¿Cómo debo trabajar con múltiples filtros make4ht?

¿Cómo debo trabajar con múltiples filtros make4ht?

A medida que uso más tex4ht/make4ht, descubro que estoy creando una colección de mis propias personalizaciones. Para ayudar a organizar esto, ¿existe alguna forma recomendada de administrar la inclusión de (múltiples) filtros/domfilters personalizados dentro de make4ht?

Sé que (específicamente para un filtro dom) puedo crear un archivo build.luacon

local domfilter = require "make4ht-domfilter"
local process = domfilter {
  -- do stuff here
  return dom
  end
}
Make:match("html$", process)

y luego correr make4ht -e build.lua.

Pero, ¿qué pasa si quiero tener algunos filtros (dom) diferentes para hacer cosas diferentes? ¿Puedo dividirlos en archivos diferentes y especificar de alguna manera cuál ejecutar?

Además, ¿es posible especificar filtros (personalizados o 'estándar') para ejecutar desde un paquete .sty/.4ht o dentro del .cfg? (Reconozco que esto podría representar un riesgo de seguridad...)

Me temo que hay muchas preguntas aquí, pero las respuestas a cualquiera serían bienvenidas.

Respuesta1

Desafortunadamente no es posible modificar la secuencia de compilación desde el lado TeX, todo debe hacerse en archivos Lua.

Puede definir fácilmente nuevos módulos de filtro DOM. Sólo necesitas usar el siguiente esquema de nombres: domfilters/make4ht-<filtername>.lua. El domfiltersdirectorio se puede colocar en su directorio actual, pero si desea que esté disponible universalmente, es mejor colocarlo en su árbol TEXMF local, en el scripts/lua/directorio. Por ejemplo, en mi sistema, puede ser ~/texmf/script/lua/domfilterso ~/texmf/script/lua/make4ht/domfilters.

El módulo de filtro DOM debe exportar la función que toma el objeto DOM, le realiza modificaciones y luego lo devuelve. Verfiltros DOM existentespor inspiración.

El filtro DOM de muestra puede verse así (llamado ~/texmf/scripts/lua/make4ht/domfilters/make4ht-test.lua):

return function(dom)
  print "Hello world"
  return dom
end

Puede solicitar este filtro DOM desde un archivo de compilación como este:

local domfilters = require "make4ht-domfilter"

local process = domfilters {"test"}
Make:match("html$", process)

Puedes encadenar múltiples filtros:

local process = domfilters {"test", "fixinlines"}

Cada paso toma el objeto DOM del filtro anterior, por lo que no es necesario analizar el archivo HTML nuevamente.

Si desea que su secuencia de compilación esté disponible en varios proyectos, tiene dos opciones:

  1. archivo de configuración make4ht
  2. nueva extensión

archivo de configuración make4htes algo diferente al archivo de configuración TeX4ht (archivo TeX con .cfgextensión). Es un archivo de compilación especial de Lua que se puede colocar en su directorio de inicio o en la raíz del proyecto. Debería nombrarse .make4ht. Por lo tanto, puede tomar el ejemplo del archivo de compilación anterior, cambiarle el nombre .make4hty colocarlo en cualquiera de los directorios principales de su proyecto y se usará automáticamente.

Extensionespuede modificar varios aspectos del proceso de construcción. Deben colocarse en make4ht/extensionsel directorio y denominarse make4ht-ext-<filename>.lua. Necesitan exportar tablas con funciones, en particular modify_build.

Aquí hay una extensión de muestra 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

La función M.testtoma el formato de salida actual y decide si la extensión debe ejecutarse o no. Algunas extensiones solo admiten HTML, por ejemplo, por lo que esta función regresa falsey no se usa en absoluto.

La función M.modify_buildpuede contener código similar al de los archivos de compilación, pero make4htse usa una variable, pasada como parámetro, en lugar del Make4htobjeto global que se usa en los archivos de compilación normales.

Se puede requerir una extensión usando el fparámetro de make4ht, como

make4ht -f html5+sample filename.tex

La salida de este comando es:

[STATUS]  make4ht: Conversion started
[STATUS]  make4ht: Input file: sample.tex
hello format    html5
hello modify build
Hello world
[STATUS]  make4ht: Conversion finished

información relacionada