Los filtros de Pandoc son programas que permiten transformar el árbol de sintaxis abstracta (AST) del documento entre las fases de análisis y escritura. Los filtros tradicionales trabajan con una representación en JSON y pueden escribirse en cualquier lenguaje, pero presentan dos inconvenientes claros: el coste de serializar y deserializar JSON por la entrada y salida estándar, y la dependencia del entorno del usuario, que necesita un intérprete del lenguaje y una biblioteca para manipular el AST.
Desde la versión 2.0, Pandoc incorpora de forma nativa un intérprete de Lua 5.4 y una biblioteca para crear filtros, lo que elimina cualquier dependencia externa. Los tipos de datos de Pandoc se convierten directamente a estructuras Lua, sin pasar por JSON, lo que reduce drásticamente la sobrecarga.
Un filtro Lua es una tabla cuyas claves son nombres de elementos del AST y cuyos valores son funciones que operan sobre esos elementos. Para usarlo basta con guardar el archivo, por ejemplo smallcaps.lua, e invocarlo con --lua-filter=smallcaps.lua. Esta opción admite múltiples filtros, que se aplican en el orden en que aparecen en la línea de comandos, junto con los filtros JSON invocados con --filter.
El sistema contempla además funciones especiales como Inline, Block, Inlines, Blocks, Meta y Pandoc, que actúan como reservas para elementos sin función específica. El orden de recorrido puede configurarse entre 'topdown' y 'typewise' (el valor por defecto), con compatibilidad desde Pandoc 2.17.
