This file records noteworthy changes.  (Public domain.)
See also */NEWS, */ChangeLog, etc.

2026
* Most engines: the "Infinite glue shrinkage" message resulting from
  \ignoreprimitiveerror=1 is now written only to the log file, and without
  the word "error" (since it isn't).

* bibtex 0.99e: fixes for weave (only); no code changes.


2025 (for TeX Live 2025, 7 March 2025)
* Most engines: new primitive parameter \ignoreprimitiveerror: if set to 1,
  the error "Infinite glue shrinkage found in box being split"
  becomes a warning (thus program exit status remains 0). Other values
  are reserved for future use.

* Most engines: if TeX exits due to the -halt-on-error option,
  write the help message to the log file, as happens without -halt-on-error.

* Most engines: scaling fonts to >= 2048pt now results in an error
  message, instead of (unhandled) arithmetic overflow or silent changing
  of the user's value.

* Relevant formats: generate PDF 1.7 by default, not 1.5. (No change in
  the binaries; done in the .ini files and dvipdfmx.cfg.)

* mf: remove incorrect change of long standing in the Web2c mf.ch file,
  which affects calculation of a few pen polygons in a small way; we don't
  know if any extant fonts are impacted.

* (e)uptex: support combining characters with multiple codepoints,
  Unicode Latin characters and 16-bit OFM Level-0 with
  new kcatcodes: modifier(20), latin_ucs(14).


2024 (for TeX Live 2024, 10 March 2024)

* For all engines: if the --output-directory option is given, its value
  is saved in the enviroment variable TEXMF_OUTPUT_DIRECTORY, for the
  benefit of subprograms (called with \write18).

  Furthermore, if the --output-directory option is not given, but
  the TEXMF_OUTPUT_DIRECTORY environment variable is set, that is used
  for all output files, as if it had been the value given to the
  --output-directory option. More details:
  https://tug.org/texinfohtml/web2c.html#Output-file-location

* mpost: new option --numbersystem=interval to support interval
  arithmetic, via the mpfi library.


2023 (for TeX Live 2023, 9 March 2023)

* (u)pTeX: now using as aliases of e(u)ptex. Also support guessing input
  encodings with these and (u)pbibtex.

* bibtex: check options early to avoid looking for texmf.cnf unnecessarily;
    use max_print_line texmf.cnf variable.

* ctangle: with option +u, transliterate UTF-8 in C source.

* mflua{,jit}: add potrace support.


2022 (for TeX Live 2022, 21 March 2022)

* new hitex engine included, which outputs HINT files for display on
mobile devices. HINT viewers for GNU/Linux, Windows, and Android are
available.

* tangle, weave: support optional third argument to specify output file.

* twill program for original Pascal *.web mini-indexes included.

* across actively-extended engines
  (that is, not including original (e)TeX, Aleph, hiTeX):
- new primitive \showstream to redirect \show output to a file.
- new primitives \partokenname and \partokencontext allow overriding the
  name of the emitted \par token mitted at blank lines, the end of
  vboxes, etc.


2021 (for TeX Live 2021, 23 March 2021)
* Knuth 2021 tune-up, with fixes to all of his *.web files. Overview:
https://tug.org/TUGboat/42-1/tb130knuth-tuneup21.pdf
New TeX version is 3.141592653, MF 2.71828182.

* for all engines except original TeX:
- if \tracinglostchars >= 3, make missing characters an error (not just
  a log message), and always report the character code in hex.
- if new primitive parameter \tracingstacklevels > 0, logging of macro
  expansion at higher levels is truncated; also, the macro expansion
  depth is indicated on \tracingmacros log lines.

* obscure interaction sequences no longer crash.


2020 (for TeX Live 2020, 27 March 2020)
* \input now also accepts a group-delimited filename, e.g.,
\input{foo.tex}. The usage with a standard space/token-delimited
filename is completely unchanged.

The group-delimited name was previously implemented in LuaTeX; now it is
available in all engines. ASCII double quote characters (") are removed
from the filename, but it is otherwise left unchanged after
tokenization. This does not currently impact LaTeX's \input command, as
that is a macro redefinition of the standard \input primitive.

* New cross-engine option -cnf-line=STR.

* All TeX engines except tex and etex now compress (with zlib) .fmt files
  (XeTeX and LuaTeX already did so).

pTeX (and all variants): new primitives \ifjfont and \iftfont.
eptex, euptex: new primitives \Uchar, \Ucharcat, \current(x)spacingmode,
  \ifincsname; revise \fontchar?? and \iffontchar.
euptex only: new primitive  \currentcjktoken.

BibTeX: now reallocates on large (>20k) field values instead of aborting.


2019 (for TeX Live 2019,  7 April 2019)
BibTeX: subsidiary .aux files are looked for in the directory of the
main .aux file, if not found as-is (to work better with -output-directory).

CWEB: now comes from the CWEBbin package
(https://github.com/ascherer/cwebbin), with translation capabilities,
more language support, and more.


2018 (for TeX Live 2018, 14 April 2018)
* Directories in the -output-directory do not mask files by the same name.

2017 (for TeX Live 2017, 19 May 2017)
2016 (for TeX Live 2016, 21 May 2016)
2015 (for TeX Live 2015, 21 May 2015)
2014 (for TeX Live 2014, 24 May 2014)
2013 (for TeX Live 2013, 30 May 2013)
* Doc changes and bug fixes.

2012 (for TeX Live 2012, 1 July 2012)
* upTeX and e-upTeX Japanese engines added.

2011 (for TeX Live 2011, 5 July 2011)
* epTeX Japanese engine added.

2010 (for TeX Live 2010, 4 June 2010)
* BibTeX line-breaking bug fix in bibtex.web.
* pTeX Japanese engine added.

2009 (for TeX Live 2009, 13 October 2009)
* --shell-restricted aka shell_escape=p for restricted shell access.
* --enable-write18 and --disable-write18 accepted as synonyms for
  --shell-escape and --no-shell-escape, for compatibility with MiKTeX.
* Omega removed; use Aleph.
* Build system now automake-based.

7.5.7 (for TeX Live 2008, 7 July 2008)
* Include Knuth's 2008 updates.
* Include LuaTeX.
* Include SyncTeX.
* Plenty of pdfTeX and MetaPost updates.
* Pool strings now compiled into the binaries instead of .pool files.
* autoconf support finally modernized.

7.5.6 (for TeX Live 2006-07, 30 December 2006)
* Include XeTeX.
* pdfTeX and MetaPost updates.

7.5.5 (26 June 2005)
* BibTeX: dynamically resize the buffer (and related arrays).
* MP: Version 0.9
* mpware: Brought to the equivalent of version 0.9.
* e-TeX, Aleph, pdfeTeX: You can use -ini -etex to start etex mode now
  instead of prepending an asterisk.

7.5.4 (6 February 2005)
* TeX: \ifeof18 is false if \write18 is enabled.
* MF, MP: Prevent pathological code from overflowing the "serial number"
  counter for independent variables.

7.5.3 (28 November 2004)
* ctie: New program, from Julian Gilbey.
* TeX, MF, MP: We now save the name of the engine in the dump, in
  order to be able to give better error messages in case a dump
  written by another engine is being read.
* TeX, MF, MP: We now dump the xord, xchr, and xprn arrays, so if
  if a TCX file was loaded in INI mode, that will be retained
  when the dump is loaded.  (Doesn't apply to Omega family.)
* TeX, MF, MP: Add -8bit option, which makes all characters
  printable by default.  Note that a TCX file can change this.
  (Doesn't apply to Omega family.)
* TeX, MF, MP: In TCX files, a third number (0 or 1) can be
  used to set printability.  (Doesn't apply to Omega family.)
* TeX: Include encTeX extension.
* mft: Allow more than one -style option.
* pdfxTeX: New.
* DVItoMP: Now supports color specials, like those added by the
  colordvi package.  Note that this feature should be considered
  experimental, and may change in the future.
* PATGEN: Peter Breitenlohner fixed some typos in text in patgen.web.

7.5.2 (19 February 2003)
* e-TeX: Remove last bits of support for installing it as 'tex'.
* Makefile fixes.

7.5.1 (17 February 2003)
* New upstream sources from Knuth.
* Lots of little fixes to the new makefiles.

7.5.0 (15 February 2003)
* Use libtool.
* Use e-TeX, pdfeTeX as the engine for the latex, pdflatex format.

7.4.6 (7 February 2003)
* Makefile structure changed.
* e-Omega: New

7.4.5 (28 January 2003)
* TeX: Obey locale setting only for terminal and log file.
* METAFONT, MetaPost: Do not care about locale settings at all.

7.4.4 (16 January 2003)
* TeX: Increase maximum size of max_strings, main_memory, and pool_size.

7.4.3 (11 January 2003)
* CWEB: Add --help and --version options.
* CWEB: Support both .w and and .web suffixes.
* CWEB: When adding #line directives, put in the path, not just the filename.

7.4.2 (23 December 2002)
* Minor fixes to makefiles.

7.4.1 (20 December 2002)
* cweave: Fixed hangs caused by wrong argument order in two prototypes.

7.4.0 (14 December 2002)
* Using 7.4.x numbers now because the interface of kpathsea has changed in
  ABI-incompatible ways.
* share/*: Stop shipping fontmap files and tcx files in the web2c tarball.
* CWEB: Add protypes to code through the change files.
* BibTeX: Names ending in 'aux' were not handled correctly.
* METAPost: Handle date and time privitives correctly, instead of having
  them give the date of the mem file.

7.3.11 (13 November 2002)
* BibTeX: purify$ would strip characters with code >= 128 from its argument.
  This has now changed to just passing them through.  This should have no
  effect if you don't use such characters in the input, but may result in
  different output otherwise.  Note that other aspects, like proper sorting
  of such characters are not handled at all.
* CWEB: Increase the maximum length of the names of the input files.
	
7.3.10 (11 November 2002)
* Added the CWEB programs.  Thanks to Wlodek Bzyl.

7.3.9 (22 October 2002)
* TeX, METAFONT, METAPost: Add --jobname option to set the jobname.  This
  supercedes the use of --fmt, --efmt, --mem, and --base to set the name of
  the format to be dumped in ini mode.
* TANGLE: New options --length, --lowercase, --uppercase, --mixedcase,
  --underline, --strict, --loose.  These affect the output generated by
  tangle.

7.3.8 (11 October 2002)
* BibTeX: do not split \% in an output line.
* TeX: mention active extensions.
* TeX: change name/banner if extensions that break strict compatibility with
  Knuth's TeX are active.
* web2c: splitup now uses a command-line switch to determine how after
  how many lines it should split the sources.

7.3.7 (27 November 2001)
* Minor release, again incorporates internal changes to help Omega.
* Update of the fontmaps.

7.3.6 (18 November 2001)
* Minor release, again incorporates internal changes to help Omega.
* TeX, METAFONT, MetaPost:
  New option --recorder which enables a filename recorder.  A file
  with extension .fls is created which contains the names of the
  files opened for reading or writing.

7.3.5 (10 November 2001)
* Minor release, incorporate many changes due to developments of Omega.
  These are mainly internal.

7.3.4 (30 October 2001)
* Minor release, incorporates most of the features also in TeX-live 6,
  which is known as release 7.3.3.1.
* TANGLE: As an extension, you can define parametric macros where '[' and ']'
  delimit the argument.
* MFT: Support METAPOST sources.
* MPTO: Add -tex=program option.  Buffer is now configurable.

7.3.3 (5 August 2000)
* Minor release.
* METAFONT: Obey buf_size from texmf.cnf instead of using a hard-coded value.

7.3.2 (19 April 2000)
* Minor release containing bugfixes for 7.3.1.  Web2C 7.3.1 was not released
  on CTAN, only in teTeX 1.0
* The TeX-live 5 CD contains Web2C 7.3.1x, which is based on the 7.3.1 release
  and contains some changes that have yet to be merged into the main tree. In
  particular, the code for "C-style" error messages and the code for source
  specials has not been merged yet.

7.3.1 (30 May 1999)
* Minor release containing bugfixes for 7.3.  Web2C 7.3 was not released
  on CTAN, only on the TeX-live 4 CD.

7.3 (26 March 1999)
* New upstream sources from Knuth.
* TeX, METAFONT, MetaPost:
  (Re)introduction of TCX files.
* Increased capacity of several programs.
* Support for pdfeTeX added.
* Long-standing bugs in VFtoPL and TFtoPL, which led to corrupted TFM
  files being generated, have been fixed.

7.2 (15 March 1998)
* New upstream version of MetaPost: 0.64.
* TeX, METAFONT, MetaPost:
  Allow for more restrictions on the files written by \openout.
* TeX, METAFONT, MetaPost:
  New option --interaction, which can be used to set batchmode, nonstopmode,
  scrollmode, or errorstopmode.  Thus we can replace a construct like
    tex '\batchmode \input foo'
  with
    tex --interaction=batchmode foo
  and have a %&format line select the correct format.
* When %&format selects a format, the search paths are changed to conform
  to that format.
* TeX, METAFONT, MetaPost:
  During an "ini" run, the name of the format to be dumped can be set with
  the --fmt/--efmt/--base/--mem options.
* web2c: Extensive support for building e-TeX, Omega, a PDFTeX.
* web2c: The manual pages are back.

7.1 (10 November 1997)
* Some MSDOS/Win32 support added to the sources.
* BibTeX: increased capacity.
* VPtoVF: Increased capacity.
* TeX, METAFONT, MetaPost:
  - File foo.bar.tex results in \jobname foo.bar, hence foo.bar.{log,dvi,...}.
    This as opposed to foo and foo.{log,dvi,...} which it how it used to be in
    version 6.  In 7.0 situation was confusing, as the heuristics used would
    sometimes result in the extension being stripped, sometimes not.
* TeX:
  - The -extend-jobname option has been removed.
  - Printing of non-ASCII characters in diagnostics, code by Bernd Raichle.
  - All three of LF, CR, and CRLF are recognized end-of-line tokens.
* web2c:
  - Some support for e-TeX added to convert.

7.0 (6 February 1997)
* Update from Knuth for tex, mf, dvitype, pltotf, vptovf, and tangle,
  John Hobby's MetaPost (and support programs) included,
  update from P. Breitenlohner to dvicopy 1.5 and patgen 2.3.
* Update for kpathsea 3.0.
* Texinfo manual written.
* Amiga, OS/2, Windows NT support in the sources.
* TeX:
  - if -shell-escape or shell_escape in texmf.cnf is enabled,
    \write18{str} passes str to system(3) for processing by sh.
  - MLTeX extensions (\charsubdef, etc.) can be enabled at runtime.
  - Many array sizes can be set dynamically, in texmf.cnf.
  - MakeTeXTFM installed and enabled by default.
  - IPC communications to an external program for incremental DVI reading.
  - texfonts.map applies to TFM files, as originally intended.
  - More than 256 fonts are allowed.
  - DVI comment (with timestamp) can be overridden.
  - tex.web's consistency checks on .fmt files restored.
* Metafont:
  - A few array sizes can be set dynamically, in texmf.cnf.
  - X11 support disabled by default; configure --with-x to enable it.
  - MakeTeXMF enabled and installed by default.
* TeX, Metafont, MetaPost:
  - If the first line of the main input file starts with %&, the rest of
    the line is used as the fmt/base/mem file (if it can be found),
    except that %&ini means initex/inimf/inimpost.
  - One binary: initex/mf/mpost capabilities merged with virtex/mf/mpost.
  - New option -progname sets program name independently of argv[0].
  - Eight-bit filenames are output correctly in ^^ notation, instead of
    always being simplified to ^^@.
  - MakeTeX* scripts can be named and disabled via texmf.cnf.
  - MakeTeX* scripts are silent if \batchmode is in effect.
  - TEXMFINI environment variable checked for pool/fmt/base/mem lookups.
  - \openout (TeX) and write (MP) by default will not write to files
    whose names start with `.'.
  - ``Small'' versions no longer supported without source hacking.
  - Length bug regarding single non-ASCII characters in MF and MP fixed.
* BibTeX:
  - Some arrays dynamically reallocated as needed, other sizes increased.
  - Default behavior is verbose; new -terse option changes that.
  - Statistics are written to the .blg file.
  - Does not look at TEXINPUTS to find .bst files, but does check
    TEXBIB (after BIBINPUTS).
  - Does not interactively ask for the top-level .aux name.
* All programs:
  - Supply default extensions and default output files.
  - Support the standard --help and --version options.
  - Filenames not arbitrarily restricted in length.
  - Output written in the current directory, not the directory of
    an input file. (Most interesting for tangle.)
  - Times-Roman etc. work as font names, via texfonts.map and subsidiaries.
* dvitype prints decimal opcode numbers with --show-opcodes.
* bibtex and gftodvi never interactively ask for filenames;
  dvitype and dvicopy do not enter interactive dialogues.
* mft looks in MFTINPUTS, not TEXINPUTS.
* Configuration:
  - Optional features are enabled via configure --with-* and --enable-*
    options. Run configure --help.
  - There is no small TeX, Metafont, or MetaPost. If you want it, you'll
    have to change the change files, #define SMALL* yourself, and do
    whatever else is necessary yourself.
* Source hierarchy substantially simplified.
* Web2c:
  - Support for ifndef...endifn, a la ifdef.
  - Support for const expressions.
  - Can generate ANSI code.

Version 6.1 (3 February 1994)
* foo.bar found before foo.tex (found before foo).
* configure links sun.c to sun-sunview.c if SUNWIN is defined.
* -DLONG_64_BITS is supplied automatically (if appropriate).
* Various changes for configure --srcdir.
* Sample MakeTeX* scripts included.

Version 6.0 (24 January 1994)
* Default paths changed.
* Update for TeX 3.1415, etc.
* Change to use the kpathsea library, a la dvipsk and xdvik.

* TeX's \openin command invokes MakeTeXTeX just like \input.

* TeX & Metafont:
  - 16-byte values can be dumped, thus allowing native `long' on the DEC Alpha.
  - But 32-bit integers are used if sharable format files are desired,
    even on 64-bit machines.
  - Interrupts are accepted when waiting for input.
  
* Online output support in Metafont for Regis terminals and the NeXT.
* gftopk can handle characters with up to 100,000 rows.
* vftovp's -charcode-format=ascii works properly.
* patgen doesn't give bizarre numeric output where it should be text.

* configuration:
  - -lX11 is used for OpenWindows.
  - The MakeTeX... scripts are individually selectable by default, and
    can always be invoked if certain environment variables are set.
  - The subdirectory trick using st_nlink can be turned off.

* Makefiles:
  - man/Makefile doesn't remove itself at `clean'.
  - {tex,mf}/clean-tr[ia]p doesn't reinstall a {tex,mf}d.h with the test
     constants.
  - web2c/Makefile removes lex and yacc output at `clean'.
  - mkdirchain invoked as an absolute filename.

* web2c:
  - sync is no longer invoked; instead the Makefiles touch texd.h and
    mfd.h after they are finished.

Version 5.851d (22 February 1993)

* A file `texfonts.map' allows arbitrary mapping of font names (as given
  to, for instance, \font) to filenames.

* Metafont & TeX:
  - If a .tex, .tfm, or .mf file can't be found, MakeTeX{TeX,TFM,MF} is
    invoked before giving up, as in dvips' MakeTeXPK.
  - Sharable format/base files load faster on LittleEndian machines.
  - TEXMFOUTPUT is only used for those files which can't be written in
    the current directory, instead of all files after the first such.
    Its usage is also reflected in the `... written on ...' messages at
    the end of the run.
  - If the DISPLAY environment variable is set, Metafont assumes you are
    running under X11 for the purposes of online output (instead of
    relying on the TERM or MFTERM envvar).
  - Checks for write errors on DVI/GF output.
  - Unusual glue values no longer make TeX dump core on some systems.

* BibTeX:
  - The cross-reference feature works as documented (I had foolishly
    changed the default value of min_crossrefs to eliminate it).
  - New option -min-crossrefs=<number> to change it dynamically.
  - New option -verbose; without it, normal reportage is eliminated.
  - Maximum number of .bib files increased to 100.
  - Non-printable-ASCII characters in .bib files are preserved.

* TeXware:
  - tftopl adds a default extension `.tfm' to the input file if necessary.

* web2c: 
  - Unsigned types are used where possible to represent Pascal
    subranges.  Among other things, this eliminates a system dependency
    in creating format/base files (small_number was defined as `schar',
    which varies between systems).

* configuration:
  - Unpacks into web2c-<version> instead of src-<version>.*.
  - site.h merged into lib/c-auto.h.in and ./Makefile.in.
  - sed is used instead of patch to make the ``small'' change files.
  - sed is used instead of ed to make the trip/trap files.
  - The configure script looks in more directories for the X libraries
    and include files, and is generated from the latest version of Autoconf.
  - mfware and texware directories merged into the others.
  - The web2c version is defined in one place, so system information can
    be added to the banners more easily.

* Makefiles:
  - Makefiles in subdirectories are created by configure.
  - $(srcdir) (i.e., compiling in a different directory) is closer to working.
  - Stamp files are not used at the top level, or for {tex,mf}/convert.
  - New targets install-data and install-exec, to only install
    architecture-(in)dependent files.

* PROBLEMS.W2C has some notes on compiling and using these programs
  under DOS, contributed by melvin@math.psu.edu.

* The man pages have been significantly updated and improved by
  beebe@math.utah.edu.

* The original web files haven't changed.

Release 4.893b:
* Include patches from Tim to web2c to turn off the verbose output,
  unless -d is supplied to web2c.
* Change $(AR) in the MFwindow Makefile to `ar'.
* Try to get the base file from the program name in Metafont, as well in
  TeX.  Implication: mf.script and tex.script are no longer supplied,
  since a link to plain.{base,fmt} named {mf,tex}.{base,fmt} suffices. 
  `make install' doesn't create these links, since they only need to be
  done once.
* Move some stuff from site.h that should never be changed to a new
  file, defaults.h. Add a new definition, SIGNAL_HANDLER_RETURN_TYPE, to
  site.h, to get rid of the warnings in {tex,mf}/extra.c.
* Use a sed script, contributed by eggert@twinsun.com, instead of the
  awk script, at the beginning of the pipeline.
* Fix an unsigned comparison problem in pltotf, that made cc produce
  infinite ligature loops when converting trip.pl.
* Change threshold in Metafont, and f in tftopl, so broken C compilers
  (like some versions of pcc) don't get confused.
* Port vftovp and vptovf. Move pktogf and pktype to fontutil.
* Allow more than 500 kern pairs in pltotf.
* Change the first parameter to {mf,extra}/extra.c to *filename from
  filename[].
* Use a better hack for the mutually recursive procedures in pltotf et al.,
  from Tor Lillqvist <tml@hemuli.atk.vtt.fi>.

Release 2.993+1.9 = 4.893a:
Sebastian contributed the updates to ctex.ch, tftopl.ch, and pltotf.ch. 
Karl did the cmf.ch update.

Release 3.0:
Brings everything up to the new 8-bit versions.
Almost every file has changed at least somewhat, so I'm not going to
list all the changes.  Here are some highlights:
* char is now 0..255 instead of 0..127 in *.defines.
* `packed' is no longer ignored as part of an identifier (e.g., `packed_trie').
* new Makefiles to make it easier to do the trip/trap test, and with all
  the support programs integrated.
* ctex.ch has a hack to get around trie_op_hash being an array with a
  negative lower bound.
* pltotf.ch has a hack to get around mutually recursive routines.
