TUGboat, Volume 0 (9999), No. 0 preliminary draft, August 6, 2018 13:00 ? 1
What’s to stay, what’s to go — Compatibility in the LATEX World Frank Mittelbach Intro (from a LaTeX And now? perspective) Abstract In this talk I take a look at the major disruptions that have rocked the LAT X world in the past decades What's to stay, what's to go E The new compatibility Major Disruptions in Compatibility in the LaTeX approach 40 years and how we handled them, covering some of the re- World Frank Mittelbach sulting consequences. Rio, July 2018 In the latest part of this saga a rollback con- cept for the LAT X kernel was introduced (around So what now? E Handling disruptions 2015). Providing this feature allowed us to make corrections to the software (which more or less didn’t Slide #2 happen for nearly two decades) while continuing to maintain backward compatibility to the highest de- gree. I will give some explanation on how we have now extended this concept to the world of packages Gutenberg press (1450+) and classes which was not covered initially. As the Commercial Typewriters (since approx 1870) classes and the extension packages have different re- TeX (1978/79+)
40 years quirements compared to the kernel, the approach is LaTeX 2.0 (1983)
The last 4 different (and simplified). This should make it easy LaTeX 2.09 (1986) 35 years Intro (from a LaTeX decades for package developers to apply it to their packages perspective) LaTeX2e (1994) and authors to use when necessary. iTeX solves it all (announced 2010, available ???)
Slide #3
plain TeX (1978) birth of TeX AmSTeX (around 1981)
structural needs
user needs Major Disruptions in 40 years
external influences What's to stay, what's to go
Compatibility in the LaTeX Slide #4 World
Frank Mittelbach
Rio, July 2018
Slide #1
preliminary draft, August 6, 2018 13:00 preliminary draft, August 6, 2018 13:00 ? 2 preliminary draft, August 6, 2018 13:00 TUGboat, Volume 0 (9999), No. 0
birth of TeX
structural needs LaTeX 2.09 (1986) Major Disruptions in 40 years
user needs The early years LaTeX 2.09
Major Disruptions in 40 years external LaTeX 2.09 -> LaTeX2e influences
Handling disruptions Mature LaTeX2e
Slide #5 Slide #8
birth of TeX small user base computer affine
starting point small developer community small code base structural needs LaTeX 2.09 (1986) huge step fairly consistent interface use (8 years)
The early years provide structure 7bit -> 8bit TeX 3.0 LaTeX 2.09 goals
get it going Flexible font usage
LaTeX2e (1994) stable system managed by a single developer user needs graphics and color needs compatibility approach
(and no history to take care of) Major Disruptions in complex mathematics 40 years internationalization needs LaTeX 2.09 -> LaTeX2e
external influences Mature LaTeX2e
Slide #6 Slide #9
The early years birth of TeX LaTeX 2.09
structural needs LaTeX 2.09 (1986) larger user base huge step (8 years) new needs
7bit -> 8bit TeX 3.0 extended user needs starting point large(er) and independent developer community
Flexible font usage bigger and inconsistent code base LaTeX2e (1994) user needs graphics and color needs less time (and interest) by Leslie to manage
complex mathematics unification of incompatible versions and approaches
LaTeX 2.09 -> medium step LaTeX2e goals providing missing interfaces internationalization needs (21 years)
providing needed functionality Major Disruptions in 40 years pdf format pdftex (becomes standard engine) emulate old syntax and processing in old documents
Omega, distinguish old and new engines disallow (some) old syntax in XeTeX, documents by syntax remainder of document appear change at the very beginning LuaTeX compatibility approach external Result: mix of old and new syntax influences becomes is avoided LaTeX2e supported on Unicode popular small step all major engines (2015) (3 years) develop a large regression test suite largely responsible for the success based on LaTeX 2.09 behavior! of the transition new files are LaTeX2e assumes utf8 (normally) encoding by default (2018) unicode Mature LaTeX2e
Slide #7 Slide #10
preliminary draft, August 6, 2018 13:00 preliminary draft, August 6, 2018 13:00 TUGboat, Volume 0 (9999), No. 0 preliminary draft, August 6, 2018 13:00 ? 3
kernel code got stale
The early years starting point LaTeX 2.09 extended user everybody feared updates as they tend to break needs compatibility regardless how important they were
LaTeX 2.09 -> LaTeX2e bring LaTeX back onto an active development cycle goal(s) while providing compatibility for old documents
more user new code base with many new features built-in, e.g., kernel (2015) needs + NFSS, language support, amsmath, graphics, color, etc external starting point approach The new compatibility influences approach many standard extension packages packages + classes (2018) after some period with corrections and additions goal(s) correctly process documents even after many years conclusion further development then happened essentially frozen kernel code only in packages (5000+ these days) Mature LaTeX2e
initial compatibility fixes to the kernel placed in package fixltx2e approach (failed eventually)
packages are assumed to only add functionality (and fixes), i.e. compatible changes or change name i.e., can be distingusihed
fixltx2e failed why? package development
So what now?
Slide #11 Slide #14
The early years LaTeX 2.09 extended user needs
LaTeX 2.09 -> LaTeX2e more user introduce latexrelease package needs + external influences usage in documents
moving target: documents using it would change %<*2ekernel,latexrelease> over time as fixes and additions got added %
incompatible changes without renames current code goes into the kernel and (surrounded by \IncludeInRelease and \EndIncludeIn Release).
use of each and everything as hooks into kernel code Older Code only goes there
package development creation of all kind of package interdependencies conclusion: works well, but is not convenient to use (loading order, release level etc) and not really suitable for package or class level
compatibility broken in many ways
„don’t touch it“ mentality on large packages
Slide #12 Slide #15
The early years LaTeX 2.09
LaTeX 2.09 -> LaTeX2e
starting point
goal(s) So what now? Handling disruptions Mature LaTeX2e initial compatibility approach (failed eventually)
failed why? got stuck
touch anything anywhere and something will fail and often in very surprising ways
Slide #13
preliminary draft, August 6, 2018 13:00 preliminary draft, August 6, 2018 13:00 ? 4 preliminary draft, August 6, 2018 13:00 TUGboat, Volume 0 (9999), No. 0
but it needs to overcome the opposition of those that do have no immediate need introduce general rollback it is human nature to be against leaving \RequirePackage[
in addition it is possible to request a specific release on package/class level Remember that new users may be the silent majority!
\usepackage[
up to now
if it contains a date, e.g., 2018-04-01 then it denotes a
the same optional argument exists for \documentclass and is repurposed as well
\DeclareRelease{
code in the package or class
\DeclareCurrentRelease has no file argument as the code for it is in the current file Future development is necessary for the health and \IfTargetDateBefore{
stay with LaTeX 2.09 this concept is not intended to track each and every WHO NEEDS THES FONTS WITH ALL granularity minor patch but only major changes that would THESE UNNECESSARY CHARACTERS? have noticable effects on document processing Put it into a separate format so that it (1994) doesn’t affect existing LaTeX users if necessary (or desired) it is possible to provide finer granularity within a file email I received after Joseph discussed UTF-8 as a default on his blog
sounds familiar?
THIS WILL BREAK THE And now? well it didn’t ... okay, we had to get five WORLD (2018) patch releases out fairly quickly to fix some oversights and we missed alerting one or the other package owner of a need to adjust --- but on the whole it went fairly well
Outlook
Slide #16
Slide #19
starting point
goal(s)
approach
We now have a rollback mechanism that works and kernel, class and package level Future development is necessary for the health and This allows future development without prosperiority of a system compromising compatibility
once you finished a paper you can now freeze its processing The new compatibility WHO NEEDS THES FONTS WITH ALL conclusion (subject to usage of the concept) by simply adding approach THESE UNNECESSARY CHARACTERS? \RequirePackage[
at its top with a better chance that it will still work in the future THIS WILL BREAK THE though for important works like, say, a book I would still WORLD (2018) suggest to save the texmf tree along with the sources
focus further on consolidation of the 2e world And now? (break the world --- for the better hopefully) Outlook
work on the next big disruption: accessibility pdf
Slide #17
Slide #20
The slides have been retrospectively constructed from the mindmap used during the presentation.
Frank Mittelbach https://www.latex-project.org
preliminary draft, August 6, 2018 13:00 preliminary draft, August 6, 2018 13:00