Files
readableFilter/README.md
2025-10-13 15:20:39 +08:00

1.0 KiB

Piecewise Readable Filter

This is a pandoc lua filter that manipulates fenced_divs in pandoc markdown.

Inspired by this joke(in chinese).

Example: example/What is a group.pdf

Useful refs:

How does this work?

filter.lua walks the AST. There are some special leaf nodes with a include attr which is a string containing labels of some other divs to be included here.

For each of include node i, we maintain a list fa[i] containing nodes with labels on the path i -> root. Then for each label l in i's include list, one can see that every node in fa[i] depends on l. Thus we build a digraph G on labels. If G is a DAG, then we can use topological sort to rank its vertices and thus decide the order of substitution; Otherwise, G contains a directed cycle, the filter reports an error.