A current status on finl
This site got submitted to Hacker News (a lot sooner than I would have chosen), so a few notes on where things are and where they’re going.
I’m definitely writing in Rust. Much like I expect finl to remove pain points around LaTeX, Rust removes a lot of pain points around code that I would have otherwise written in C++. I’m currently focused on finishing up gftopdf, a replacement for gftodvi, as a tool to explore Rust, PDF creation and begin implementation of some sub-libraries of finl.
My roadmap for the immediate future:
- gftopdf (along with finl-charsub)
- finl-parse (be able to parse a finl document into an internal token list)
- finl-math (math typesetting initial version)
- finl-html (output a document to HTML)
finl is not LaTeX not in the same way that GNU is not Unix. The latter is, with a few idiosyncrasies, a drop-in replacement for Unix tools. finl is not attempting to replicate TeX and LaTeX but to reimagine and replace it. It’s more like Java vs C++. The document markup language is going to be almost identical to LaTeX (although the tabular
environment might well be very different). But there will not be a TeX-style macro language. There will be non-Turing complete macros available to document authors, but any more sophisticated handling will be done through extensions written in Python.
Document structure and style will be separate concepts. Style will be declarative. I’m leaning towards YAML for this, but I’ve not made any firm commitments in my mind on this.
Extension loading will be designed to work with artifact repositories and will have three-part naming similar to dependencies in mvn/groovy.
A document preamble might look like the following (everything is subject to change):
\DocumentType{article} \DocumentStyle{IEEE:transactions:1.0.0} \LoadExtension{ams:commutative-diagrams:1.2.3}[\cd -> \CD, *] \RenewDocumentCommand{\le}{\leqslant}
This shows specifying the document style, loading an extension (with a command name mapped to a different name for the document) and a user-level macro to have \le
typeset ⩽ instead of ≤ . Where a namespace is not specified (like in the \DocumentType
command), the default namespace of finl will be assumed. Likewise, a missing version will be assumed to be the special version of LATEST
. I’m thinking that the first time a document is processed, a file foo.lock
will be created which will have the versions applied for any unspecified (or range-based) versions. Extensions are allowed to have their own dependencies. I think (but I can’t commit to it), that it should be possible to have extensionA
require version 2 of extensionC
and extensionB
require version 3 of extensionC
without conflict.
Oh, one more thing: Right now, some formatting on the blog is off—in particular, you cannot click on an article title to get to the permalink for the article, and comments can only be accessed from the article’s page which is not readily accessible. I welcome comments at my email of don.hosek@gmail.com