<<

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 format (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 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 %\IncludeInRelease{}{

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[]{latexrelease} well-established pathes Future development is necessary for the health and now rolls the kernel code back and additionally prosperiority of a system any package or class code Existing user base (even if dwindling) is vocal in „stay as is / why change?“

in addition it is possible to request a specific release on package/class level Remember that new users may be the silent majority!

\usepackage[]{}[] And now?

up to now requested that the usage in documents package is at least from that date or younger Outlook

if it contains a date, e.g., 2018-04-01 then it denotes a as before we now repurpose that optional argument: if it contains = then an attempt is made to load the package as it was at this date

the same optional argument exists for \documentclass and is repurposed as well

\DeclareRelease{}{}{} \DeclareRelease{}{}{} ... \DeclareCurrentRelease{}{} packages + classes (2018) \ProvidesPackage ... Slide #18 denotes a named version

denotes the first day this release was current

code in the package or class or but not both can be empty

is the file to load for this release

can be simply the corresponding .sty file from the release date (preferably with the commentary at the beginning adjusted)

\DeclareCurrentRelease has no file argument as the code for it is in the current file Future development is necessary for the health and \IfTargetDateBefore{} prosperiority of a system {} {}

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[]{latexrelease} (1994)

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