0% found this document useful (0 votes)
46 views4 pages

Slide #2: What'S To Stay, What'S To Go Compatibility in The Latex World Frank Mittelbach Rio, July 2018

This document discusses major disruptions in the LaTeX world over the past 40 years and how the LaTeX community has handled them. It covers how a rollback concept was introduced around 2015 to allow corrections to the LaTeX kernel while maintaining backward compatibility. The talk will explain how this concept has now been extended to LaTeX packages and classes, which have different requirements than the kernel. This should make it easier for package developers to apply rollbacks to their packages.

Uploaded by

Alireza Takrimi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
46 views4 pages

Slide #2: What'S To Stay, What'S To Go Compatibility in The Latex World Frank Mittelbach Rio, July 2018

This document discusses major disruptions in the LaTeX world over the past 40 years and how the LaTeX community has handled them. It covers how a rollback concept was introduced around 2015 to allow corrections to the LaTeX kernel while maintaining backward compatibility. The talk will explain how this concept has now been extended to LaTeX packages and classes, which have different requirements than the kernel. This should make it easier for package developers to apply rollbacks to their packages.

Uploaded by

Alireza Takrimi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

TUGboat, Volume 0 (9999), No. 0 preliminary draft, August 6, 2018 13:00 ?

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 LATEX world in the past decades The new compatibility
What's to stay, what's to go
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 LATEX kernel was introduced (around So what now?
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+)

quirements compared to the kernel, the approach is LaTeX 2.0 (1983)


40 years

different (and simplified). This should make it easy The last 4


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

larger user base


structural needs LaTeX 2.09 (1986)
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 documents by syntax
disallow (some) old syntax in
XeTeX,
appear remainder of document
LuaTeX change at the very beginning
compatibility
approach
external Result: mix of old and new syntax
influences becomes is avoided
Unicode LaTeX2e supported on small step
popular 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 %<latexrelease>\IncludeInRelease{<date>}{<label>}{<info>}
...
worse: some classes added fixlt2e making the class %<latexrelease>\EndIncludeInRelease
or package a moving target without you knowing it %</2ekernel,latexrelease>
fixltx2e
even worse: if it implemented a change of interface then other packages %<latexrelease>\IncludeInRelease{<earlier-date>}{<label>}{<info>}
had to deal with different APIs depending on whether or not it was loaded %<latexrelease> ...
%<latexrelease>\EndIncludeInRelease kernel (2015)
%<latexrelease> ...
only a fraction of the user base was using it, thus
%<latexrelease> ...
most never got a correction even for glaring bugs
%<latexrelease>\IncludeInRelease{0000-00-00}{<label>}{<info>} code in the kernel
%<latexrelease> ...
Mature LaTeX2e
example: caption -> caption2 -> caption3 -> caption %<latexrelease>\EndIncludeInRelease
failed why?

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[<date>]{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[<option(s)>]{<package>}[<min-date>] And now?

up to now <min-date> 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 <min-date> as before
we now repurpose that
if it contains =<date> then an attempt
optional argument:
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{<name>}{<date>}{<external-file>}
\DeclareRelease{<name>}{<later-date>}{<external-file>}
...
\DeclareCurrentRelease{<name>}{<date>} packages + classes (2018)

\ProvidesPackage ...

<name> denotes a named version


Slide #18
<date> denotes the first day this release was current

code in the package or class


<name> or <date> but not both can be empty

<external-file> is the file to load for this release

<external-file> 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{<date>} prosperiority of a system
{<before-date-code>}
{<after-or-at-date-code>}

stay with LaTeX 2.09


this concept is not intended to track each and every WHO NEEDS THES FONTS WITH ALL
minor patch but only major changes that would granularity
THESE UNNECESSARY CHARACTERS?
have noticable effects on document processing (1994)
Put it into a separate format so that it
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
conclusion
The new compatibility WHO NEEDS THES FONTS WITH ALL
(subject to usage of the concept) by simply adding approach THESE UNNECESSARY CHARACTERS?
\RequirePackage[<current-date>]{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

You might also like