From 2281af8ba8fd52341e706f3979712f3280fcfdad Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Wed, 2 Nov 2022 03:09:43 +0000 Subject: CTAN sync 202211020309 --- macros/latex/base/README.md | 19 +- macros/latex/base/alltt.pdf | Bin 223831 -> 223831 bytes macros/latex/base/cfgguide.pdf | Bin 242888 -> 264112 bytes macros/latex/base/cfgguide.tex | 7 +- macros/latex/base/changes.txt | 3368 ++++++++++++++++--------------- macros/latex/base/classes.dtx | 4 +- macros/latex/base/classes.pdf | Bin 560350 -> 560611 bytes macros/latex/base/clsguide.pdf | Bin 402780 -> 414419 bytes macros/latex/base/clsguide.tex | 7 +- macros/latex/base/cmfonts.fdd | 40 +- macros/latex/base/cmfonts.pdf | Bin 292376 -> 292160 bytes macros/latex/base/cyrguide.pdf | Bin 239689 -> 257314 bytes macros/latex/base/cyrguide.tex | 7 +- macros/latex/base/doc-code.pdf | Bin 1081839 -> 1077527 bytes macros/latex/base/doc.dtx | 126 +- macros/latex/base/doc.pdf | Bin 755306 -> 755064 bytes macros/latex/base/docstrip.dtx | 20 +- macros/latex/base/docstrip.pdf | Bin 503671 -> 504553 bytes macros/latex/base/encguide.pdf | Bin 1318126 -> 1318126 bytes macros/latex/base/exscale.pdf | Bin 204711 -> 204711 bytes macros/latex/base/fix-cm.pdf | Bin 287733 -> 287733 bytes macros/latex/base/fntguide.pdf | Bin 502880 -> 517838 bytes macros/latex/base/fntguide.tex | 39 +- macros/latex/base/graphpap.pdf | Bin 161713 -> 161713 bytes macros/latex/base/ifthen.pdf | Bin 221211 -> 221211 bytes macros/latex/base/inputenc.pdf | Bin 318204 -> 318204 bytes macros/latex/base/lamport-manual.pdf | Bin 170878 -> 170878 bytes macros/latex/base/latexrelease.pdf | Bin 281906 -> 281906 bytes macros/latex/base/latexsym.pdf | Bin 200760 -> 200760 bytes macros/latex/base/lb2.pdf | Bin 252140 -> 252140 bytes macros/latex/base/letter.pdf | Bin 337850 -> 337630 bytes macros/latex/base/lgc2.pdf | Bin 215684 -> 215684 bytes macros/latex/base/lppl.pdf | Bin 132382 -> 132382 bytes macros/latex/base/ltboxes.dtx | 34 +- macros/latex/base/ltclass.dtx | 39 +- macros/latex/base/ltcmd.dtx | 386 +++- macros/latex/base/ltcmdhooks-code.pdf | Bin 720074 -> 719104 bytes macros/latex/base/ltcmdhooks-doc.pdf | Bin 478906 -> 478606 bytes macros/latex/base/ltdefns.dtx | 17 +- macros/latex/base/ltfilehook-code.pdf | Bin 802907 -> 803024 bytes macros/latex/base/ltfilehook-doc.pdf | Bin 548594 -> 547895 bytes macros/latex/base/ltfilehook.dtx | 23 +- macros/latex/base/ltfinal.dtx | 62 +- macros/latex/base/ltfssdcl.dtx | 322 +-- macros/latex/base/lthooks-code.pdf | Bin 1097030 -> 1091409 bytes macros/latex/base/lthooks-doc.pdf | Bin 703906 -> 701468 bytes macros/latex/base/ltkeys.dtx | 60 +- macros/latex/base/ltluatex.dtx | 287 ++- macros/latex/base/ltluatex.pdf | Bin 317700 -> 325457 bytes macros/latex/base/ltmarks-code.pdf | Bin 715715 -> 715524 bytes macros/latex/base/ltmarks-doc.pdf | Bin 587167 -> 585896 bytes macros/latex/base/ltmath.dtx | 34 +- macros/latex/base/ltnews.pdf | Bin 1180993 -> 1243036 bytes macros/latex/base/ltnews.tex | 6 +- macros/latex/base/ltnews01.pdf | Bin 161518 -> 161518 bytes macros/latex/base/ltnews02.pdf | Bin 159792 -> 159792 bytes macros/latex/base/ltnews03.pdf | Bin 159332 -> 159332 bytes macros/latex/base/ltnews04.pdf | Bin 152525 -> 152525 bytes macros/latex/base/ltnews05.pdf | Bin 174494 -> 174494 bytes macros/latex/base/ltnews06.pdf | Bin 142849 -> 142849 bytes macros/latex/base/ltnews07.pdf | Bin 137811 -> 137811 bytes macros/latex/base/ltnews08.pdf | Bin 155053 -> 155053 bytes macros/latex/base/ltnews09.pdf | Bin 129570 -> 129570 bytes macros/latex/base/ltnews10.pdf | Bin 169416 -> 169416 bytes macros/latex/base/ltnews11.pdf | Bin 111948 -> 111948 bytes macros/latex/base/ltnews12.pdf | Bin 156551 -> 156551 bytes macros/latex/base/ltnews13.pdf | Bin 182225 -> 182225 bytes macros/latex/base/ltnews14.pdf | Bin 170473 -> 170473 bytes macros/latex/base/ltnews15.pdf | Bin 130309 -> 130309 bytes macros/latex/base/ltnews16.pdf | Bin 138073 -> 138073 bytes macros/latex/base/ltnews17.pdf | Bin 166228 -> 166228 bytes macros/latex/base/ltnews18.pdf | Bin 38033 -> 38033 bytes macros/latex/base/ltnews19.pdf | Bin 230028 -> 230028 bytes macros/latex/base/ltnews20.pdf | Bin 318548 -> 318548 bytes macros/latex/base/ltnews21.pdf | Bin 244867 -> 244867 bytes macros/latex/base/ltnews22.pdf | Bin 317773 -> 317773 bytes macros/latex/base/ltnews23.pdf | Bin 286591 -> 286591 bytes macros/latex/base/ltnews24.pdf | Bin 265279 -> 265279 bytes macros/latex/base/ltnews25.pdf | Bin 204935 -> 204935 bytes macros/latex/base/ltnews26.pdf | Bin 379462 -> 379462 bytes macros/latex/base/ltnews27.pdf | Bin 250592 -> 250592 bytes macros/latex/base/ltnews28.pdf | Bin 376643 -> 376643 bytes macros/latex/base/ltnews29.pdf | Bin 455107 -> 455107 bytes macros/latex/base/ltnews30.pdf | Bin 511909 -> 511909 bytes macros/latex/base/ltnews31.pdf | Bin 526323 -> 526323 bytes macros/latex/base/ltnews32.pdf | Bin 546160 -> 546160 bytes macros/latex/base/ltnews33.pdf | Bin 522412 -> 522412 bytes macros/latex/base/ltnews34.pdf | Bin 508044 -> 508044 bytes macros/latex/base/ltnews35.pdf | Bin 563513 -> 563089 bytes macros/latex/base/ltnews35.tex | 6 +- macros/latex/base/ltnews36.pdf | Bin 0 -> 517577 bytes macros/latex/base/ltnews36.tex | 541 +++++ macros/latex/base/ltoutput.dtx | 13 +- macros/latex/base/ltpara-code.pdf | Bin 667279 -> 667097 bytes macros/latex/base/ltpara-doc.pdf | Bin 560756 -> 559976 bytes macros/latex/base/ltshipout-code.pdf | Bin 820981 -> 818741 bytes macros/latex/base/ltshipout-doc.pdf | Bin 565273 -> 563518 bytes macros/latex/base/ltshipout.dtx | 4 +- macros/latex/base/lttextcomp.dtx | 10 +- macros/latex/base/ltvers.dtx | 4 +- macros/latex/base/ltx3info.pdf | Bin 219349 -> 219349 bytes macros/latex/base/ltxdoc.pdf | Bin 242645 -> 242645 bytes macros/latex/base/makeindx.pdf | Bin 165821 -> 165821 bytes macros/latex/base/manifest.txt | 4 +- macros/latex/base/modguide.pdf | Bin 243605 -> 257804 bytes macros/latex/base/modguide.tex | 7 +- macros/latex/base/nfssfont.pdf | Bin 211180 -> 211180 bytes macros/latex/base/proc.pdf | Bin 227059 -> 227059 bytes macros/latex/base/slides.pdf | Bin 375518 -> 375518 bytes macros/latex/base/slifonts.pdf | Bin 234191 -> 234191 bytes macros/latex/base/source2e.pdf | Bin 5767995 -> 5767668 bytes macros/latex/base/syntonly.pdf | Bin 189919 -> 189704 bytes macros/latex/base/tlc2.pdf | Bin 290615 -> 290615 bytes macros/latex/base/tulm.pdf | Bin 162772 -> 162772 bytes macros/latex/base/usrguide-historic.pdf | Bin 0 -> 438515 bytes macros/latex/base/usrguide-historic.tex | 1832 +++++++++++++++++ macros/latex/base/usrguide.pdf | Bin 430994 -> 473980 bytes macros/latex/base/usrguide.tex | 2577 +++++++++-------------- macros/latex/base/usrguide3.pdf | Bin 410688 -> 0 bytes macros/latex/base/usrguide3.tex | 1112 ---------- macros/latex/base/utf8ienc.dtx | 4 +- macros/latex/base/utf8ienc.pdf | Bin 353634 -> 353237 bytes macros/latex/base/webcomp.pdf | Bin 146198 -> 146198 bytes 123 files changed, 6289 insertions(+), 4732 deletions(-) create mode 100644 macros/latex/base/ltnews36.pdf create mode 100644 macros/latex/base/ltnews36.tex create mode 100644 macros/latex/base/usrguide-historic.pdf create mode 100644 macros/latex/base/usrguide-historic.tex delete mode 100644 macros/latex/base/usrguide3.pdf delete mode 100644 macros/latex/base/usrguide3.tex (limited to 'macros/latex/base') diff --git a/macros/latex/base/README.md b/macros/latex/base/README.md index 8dba55fe14..18b3a5fcc2 100644 --- a/macros/latex/base/README.md +++ b/macros/latex/base/README.md @@ -1,7 +1,7 @@ The LaTeX kernel ================ -Release 2022-06-01 patch level 5 +Release 2022-11-01 Overview -------- @@ -9,7 +9,7 @@ Overview This bundle provides the core LaTeX kernel. In addition to this bundle, a minimal LaTeX system also needs the files contained in the -- LaTeX team documentation (`doc`) + - L3 programming layer (`l3kernel`) - L3 backend interfaces (`l3backend`) - L3 unicode support (`unicode-data`) @@ -55,18 +55,12 @@ The following files contain further information: - `ltx3info.tex` gives you some historical information about the LaTeX3 project -- `manual.err` lists errata in _LaTeX: A Document Preparation System_ (Lamport) +- `lamport-manual.err` lists errata in _LaTeX: A Document Preparation System_ (Lamport) - `tlc2.err` lists errata in _The LaTeX Companion_ (Mittelbach et al.) The files `ltnews*.tex` (part of the `doc` bundle) contain the LaTeX newsletters, the highest number being the most recent. -For historical reasons, the base distribution and the core documentation -are bundled separately. Documentation is found in the `doc` bundle. In an -installed TeX system, `base` and `doc` should be placed within the same -location; the distinction is therefore primarily of importance when looking -at the development code. - Installation ------------ @@ -80,10 +74,9 @@ Requirements ------------ The LaTeX kernel requires the e-TeX extensions to TeX, which were finalised -in the late 1990s and are available in modern TeX-derived engines. Some new -features require `\ifincsname`, which is currently available in release -versions of pdfTeX, XeTeX and LuaTeX, and is being introduced shortly in -e-pTeX and e-upTeX. +in the late 1990s and are available in modern TeX-derived engines. It also +requires a set of common post-e-TeX extensions, generally known as the +pdfTeX additions. These are available in all modern TeX engines. License ------- diff --git a/macros/latex/base/alltt.pdf b/macros/latex/base/alltt.pdf index d4173fd416..cf447a5d61 100644 Binary files a/macros/latex/base/alltt.pdf and b/macros/latex/base/alltt.pdf differ diff --git a/macros/latex/base/cfgguide.pdf b/macros/latex/base/cfgguide.pdf index 49ecab6d41..1a63114bf0 100644 Binary files a/macros/latex/base/cfgguide.pdf and b/macros/latex/base/cfgguide.pdf differ diff --git a/macros/latex/base/cfgguide.tex b/macros/latex/base/cfgguide.tex index 7694ef9b63..53f53d90b4 100644 --- a/macros/latex/base/cfgguide.tex +++ b/macros/latex/base/cfgguide.tex @@ -40,7 +40,12 @@ \title{Configuration options for \LaTeXe} \author{\copyright~Copyright 1998, 2001, 2003 \LaTeX\ Project Team.\\ - All rights reserved.} + All rights reserved.% + \footnote{This file may distributed and/or modified under the + conditions of the \LaTeX{} Project Public License, either version 1.3c + of this license or (at your option) any later version. See the source + \texttt{cfgguide.tex} for full details.}% +} \date{14 February 2003} diff --git a/macros/latex/base/changes.txt b/macros/latex/base/changes.txt index 217efcf626..0ae9b55c03 100644 --- a/macros/latex/base/changes.txt +++ b/macros/latex/base/changes.txt @@ -8,7 +8,129 @@ are not part of the distribution. ================================================================================ All changes above are only part of the development branch for the next release. -================================================================================ +================================================================================ + +######################### +# 2022-11-01 Release +######################### + +2022-10-26 Joseph Wright + + * ltfinal.dtx: + Introduce optional argument for case-changing commands + Make case changing commands language-aware + Auto-detect babel locale for case changing + +2022-10-22 David Carlisle + + * ltclass.dtx, ltdefns.dtx: Further \protect guards for gh/932 + + * utf8ienc.dtx: Correct the description of UTF-8 octets. + +2022-10-22 Joseph Wright + + * ltkeys.dtx: Correct handling of unknown option list + +2022-10-20 Joseph Wright + + * ltclass.dtx, ltkeys.dtx: + Correct an argument for a message + Define key option handler in ltkeys + +2022-10-10 David Carlisle + + * ltclass.dtx: use \protected@edef rather than \edef when expanding option lists + +2022-10-03 Marcel Krüger + + * ltluatex.dtx: + Add ordering rules for callback handlers + +2022-09-20 Frank Mittelbach + + * ltfssdcl.dtx (section{Interface Commands}): + Drop any surplus 'm' in series argument of \DeclareSymbolFont and + \SetSymbolFont (gh/918) + +2022-09-17 Frank Mittelbach + + * ltfssdcl.dtx: + New logic for freezing math versions to avoid issues with \mathchoice (gh/921) + +2022-09-07 Frank Mittelbach + + * ltboxes.dtx (section{\LaTeX\ Box commands}): + Check for nested minipages and warn if the outer one contains footnotes (gh/168) + +2022-09-03 Frank Mittelbach + + * ltmath.dtx (subsubsection{The UNSORTED Rest}): + Guard \smash against reboxing (gh/517) + +2022-09-03 Frank Mittelbach + + * docstrip.dtx (subsection{The handling of options}): + Complete the handling of @@-modules from l3docstrip.dtx (gh/337) + for +/- lines it was not done (gh/903) + +2022-08-21 Frank Mittelbach + + * ltkeys.dtx (subsection{Option usage scope}): + Correct error message text for load-only keys. + +2022-08-18 Phelype Oleinik + + * ltfilehook.dtx (subsection{Preventing a package from loading}): + Inhibit checking the loaded version when package is load-disabled, + and write to the .log (gh/888). + +2022-08-13 Marcel Krüger + + * ltluatex.dtx: + Unregister mlist_to_hlist callback when no related callbacks are registered + +2022-08-10 Joseph Wright + + * ltcmd.dtx: + Add support for keyval detection using "={...}" syntax + +2022-08-07 Frank Mittelbach + + * lttextcomp.dtx: Make \DeclareEncodingSubset act globally so that + it can be used in fd files (gh/905) + +2022-07-23 Joseph Wright + + * ltkeys.dtx: Output 'friendly' package names in messages + +2022-07-10 David Carlisle + + * cmfonts.fdd: avoid EC sans serif fonts at small design sizes. + The medium weight is bolder and wider than the bold extended. + Scale the 8pt font for sizes 5,6,7. gh/879 + +2022-06-23 Joseph Wright + + * ltoutput.dtx + Add registers \stockheight and \stockwidth + +2022-06-22 David Carlisle + + * ltkeys.dtx: + add .ifnot property (.legacy_if_set_inverse:n) + + * doc.dtx + recast Package Option declarations using \DeclareKeys + +2022-06-10 Ulrike Fischer + + * cmfonts.fdd + Add font definitions for slanted small caps (gh/782) + +2022-06-10 Ulrike Fischer + + * cmfonts.fdd + Add font definitions for slanted small caps (gh/782) ######################### # 2022-06-01 PL5 Release @@ -38,7 +160,7 @@ All changes above are only part of the development branch for the next release. 2022-06-30 David Carlisle - * ltfinal.dtx: update MakeUppercase and \MakeLowercase fo gh/881 + * ltfinal.dtx: update MakeUppercase and \MakeLowercase for gh/881 \protectd@edef no longer needed with latest l3 code. added \AddToNoCaseChangeList @@ -101,7 +223,7 @@ All changes above are only part of the development branch for the next release. 2022-06-02 David Carlisle * ltfinal.dtx: add \NoCaseChange (previously available in the - textcase package) + textcase package) 2022-06-01 Frank Mittelbach @@ -143,7 +265,7 @@ All changes above are only part of the development branch for the next release. 2022-05-08 Marcel Krüger - * utf8ienc.dtx: + * utf8ienc.dtx: Declare Unicode codepoints U+3008 and U+3009 to be equivalent to their canonical equivalent codepoints 2329/232A (corresponding to \textlangle/\textrangle) @@ -233,7 +355,7 @@ All changes above are only part of the development branch for the next release. 2022-02-21 Joseph Wright - * ltkeys.dtx: + * ltkeys.dtx: More efficient module expansion 2022-02-19 Frank Mittelbach @@ -249,15 +371,15 @@ All changes above are only part of the development branch for the next release. 2022-02-16 Joseph Wright - * ltkeys.dtx: + * ltkeys.dtx: Allow for active characters in module argument \DeclareUnknownKeyHandler better than with the "s" 2022-02-15 Joseph Wright - * ltkeys.dtx: - Expand optional module argument in design-level commands - Add \DeclareUnknownKeysHandler + * ltkeys.dtx: + Expand optional module argument in design-level commands + Add \DeclareUnknownKeysHandler 2022-02-07 Joseph Wright @@ -274,7 +396,7 @@ All changes above are only part of the development branch for the next release. * ltplain.dtx (section{Plain \TeX}): Alter \obeyspaces and \obeylines to use a redirection for special - use cases (gh/367)} + use cases (gh/367) 2022-01-20 Frank Mittelbach @@ -284,7 +406,7 @@ All changes above are only part of the development branch for the next release. 2022-01-15 Joseph Wright * ltkeys.dtx: - Clear option data in \AtEndOfPackage hook + Clear option data in \AtEndOfPackage hook 2022-01-06 Joseph Wright @@ -367,12 +489,12 @@ All changes above are only part of the development branch for the next release. 2021-11-30 Joseph Wright - * ltclasses.dtx + * ltclasses.dtx New option handling routine using ltkeys 2021-11-26 Joseph Wright - * ltkeys.dtx + * ltkeys.dtx New file to integrate keyval option processing into the kernel 2021-11-17 Marcel Krüger @@ -397,7 +519,7 @@ All changes above are only part of the development branch for the next release. * doc.dtx: Replaced doc.dtx with V3 version. The old doc can be reactivated with \usepackage{doc}[=v2]. Hyperref usage (on by default) can be turned off with - \usepackage[hyperref=false]{doc}. + \usepackage[hyperref=false]{doc}. New options etc are documented: use texdoc doc (code documentation only partly done). @@ -413,9 +535,9 @@ All changes above are only part of the development branch for the next release. 2021-12-02 Joseph Wright - * ltcmd.dtx - Insert correct default values for optional arguments into the end - of environments + * ltcmd.dtx + Insert correct default values for optional arguments into the end + of environments ######################### # 2021-11-15 Release @@ -519,11 +641,11 @@ All changes above are only part of the development branch for the next release. Use \msg_... instead of \__kernel_msg... commands for normalized error and warning commands. - * ltfilehooks.dtx, lthooks.dtx, ltpara.dtx: - Internal changes to message names + * ltfilehook.dtx, lthooks.dtx, ltpara.dtx: + Internal changes to message names * ltcmd.dtx: - Check for end-of-enviroment commands + Check for end-of-enviroment commands 2021-08-25 Phelype Oleinik @@ -815,7 +937,7 @@ All changes above are only part of the development branch for the next release. * ltplain.dtx (section{Plain \TeX}): Allocate \@inputcheck and \@unused early - so that they are before expl3 allocates more streams. + so that they are before expl3 allocates more streams. In the past this was done in ltfiles (gh/538). 2021-03-18 Phelype Oleinik @@ -948,7 +1070,7 @@ All changes above are only part of the development branch for the next release. 2021-01-31 David Carlisle * ltfilehook.dtx: set \protect to \string to avoid bad - expansion and possible non termination. github/481 + expansion and possible non termination. github/481 2021-01-27 Frank Mittelbach @@ -1216,13 +1338,13 @@ All changes above are only part of the development branch for the next release. * ltxdoc.dtx (section{DocInclude}): Quotes around the aux file name removed, - they are not needed and upset BibTeX (gh/400) + they are not needed and upset BibTeX (gh/400) 2020-10-04 Frank Mittelbach * ltfiles.dtx (section{File Handling}): Quotes around the aux file name removed, - they are not needed and upset BibTeX (gh/400) + they are not needed and upset BibTeX (gh/400) 2020-10-04 Frank Mittelbach @@ -1243,7 +1365,7 @@ All changes above are only part of the development branch for the next release. * ltfssini.dtx (section{Custom series settings for main document families}): \bfdefault@previous was called \bfseries@previous by mistake \mddefault@previous was called \mdseries@previous by mistake - (gh/395) + (gh/395) 2020-09-26 Frank Mittelbach @@ -1693,7 +1815,7 @@ All changes above are only part of the development branch for the next release. * ltfssini.dtx: Added some debugging code, but not extracted at the moment. Make the \ifx selection in \bfseries outside - of \fontseries argument so that it is not done several times. + of \fontseries argument so that it is not done several times. When \fontseriesforce is used do not auto-update the series if the family changes (gh/277) Recognize current family if it is not a ``meta'' family and @@ -1728,8 +1850,8 @@ All changes above are only part of the development branch for the next release. 2020-03-07 Marcel Krüger - * ltluatex.dtx: Fix remove_from_callback for mlist_to_hlist - and other engine callbacks hidden by user-defined ones + * ltluatex.dtx: Fix remove_from_callback for mlist_to_hlist + and other engine callbacks hidden by user-defined ones ######################### # 2020-02-02 PL 1 Release @@ -1798,11 +1920,11 @@ All changes above are only part of the development branch for the next release. 2020-01-05 David Carlisle * base/ltclass.dtx: Support more write streams for - filecontents in LuaTeX (gh/238) + filecontents in LuaTeX (gh/238) 2020-01-05 Marcel Fabian Krüger - * base/ltluatex.dtx: New reverselist callback type. + * base/ltluatex.dtx: New reverselist callback type. 2019-12-24 Frank Mittelbach @@ -1884,13 +2006,13 @@ All changes above are only part of the development branch for the next release. 2019-11-14 Joseph Wright - * ltfinal.dtx: Add loader for ltexpl - * ltexpl.dtx: New file for pre-loading expl3 + * ltfinal.dtx: Add loader for ltexpl + * ltexpl.dtx: New file for pre-loading expl3 2019-11-11 David Carlisle * ltfiles.dtx: use \quote@name again for \@filef@und in - \@iffileonpath + \@iffileonpath 2019-11-02 Frank Mittelbach @@ -1918,7 +2040,7 @@ All changes above are only part of the development branch for the next release. 2019-11-09 David Carlisle * ltfiles.dtx: More filename normalisation: expand before - removing quotes. + removing quotes. ######################### # 2019-10-01 PL 3 Release @@ -1936,7 +2058,7 @@ All changes above are only part of the development branch for the next release. 2019-11-09 David Carlisle * ltfiles.dtx: More filename normalisation: expand before - removing quotes. + removing quotes. ######################### # 2019-10-01 PL 2 Release @@ -2148,7 +2270,7 @@ All changes above are only part of the development branch for the next release. 2018-11-18 Enrico Gregorio - * ltoutenc.dtx + * ltoutenc.dtx Added \Hwithstroke and \hwithstroke 2018-11-09 Frank Mittelbach @@ -2250,17 +2372,17 @@ All changes above are only part of the development branch for the next release. * ltfinal.dtx: Make \UTFviii@undefined@err and \UTFviii@invalid@err also safe for initial file name for invalid UTF-8 and non-UTF-8 filesystems. - issue #48 + issue #48 2018-05-08 David Carlisle * ltclass.dtx: Update to suspicious rollback code for issue #43 - Make the suspicious rollback message a warning not error. + Make the suspicious rollback message a warning not error. Make the current and latest options to latexrelease set the - default rollback request to 0 so package rollback is disabled. + default rollback request to 0 so package rollback is disabled. ######################### # 2018-04-01 PL 4 Release @@ -2322,7 +2444,7 @@ All changes above are only part of the development branch for the next release. 2018-03-30 David Carlisle * ltfinal.dtx: add \UseRawInputEncoding and further - adjustments to the input encoding setup. + adjustments to the input encoding setup. 2018-03-27 Frank Mittelbach @@ -2336,7 +2458,7 @@ All changes above are only part of the development branch for the next release. * utf8ienc.dtx: Add \UTFviii@invalid * inputenc.dtx: Make \inputencoding{..} do nothing if it - specified the current encoding. + specified the current encoding. * ltfinal.dtx: Default to UTF-8 input encoding @@ -2360,7 +2482,7 @@ All changes above are only part of the development branch for the next release. 2018-02-01 Frank Mittelbach * doc.dtx: Only use\DocStyleParms if defined - (previously the test defined it but this will change in the kernel) + (previously the test defined it but this will change in the kernel) 2018-01-08 David Carlisle @@ -2373,12 +2495,12 @@ All changes above are only part of the development branch for the next release. * ltvers.dtx: possible 2018-02-01 release * ltdefns.dtx: new \@ifundefined definitions to avoid setting - csname to \relax + csname to \relax 2017-12-17 Frank Mittelbach * latexrelease.dtx: Add \latexreleaseversion info - to \ProvidesPackage output so that different versions announce + to \ProvidesPackage output so that different versions announce themselves properly 2017-04-20 David Carlisle @@ -2483,7 +2605,7 @@ All changes above are only part of the development branch for the next release. 2017-02-18 Joseph Wright * ltluatex.dtx: parametrise Lua access to register - allocation count data + allocation count data 2017-02-12 David Carlisle @@ -2493,7 +2615,7 @@ All changes above are only part of the development branch for the next release. 2017-01-28 David Carlisle * build.lua bugs.txt, manifest.txt: drop latexbug.tex from the - distribution + distribution * ltoutenc.dtx, utf8ienc.dtx: add \= for YyGg U+0232, U+0233, U+1E20, U+1E21 @@ -2592,12 +2714,12 @@ All changes above are only part of the development branch for the next release. 2016-10-15 Joseph Wright - * ltdirchk.dtx: Require e-TeX + * ltdirchk.dtx: Require e-TeX 2016-10-04 David Carlisle * ltoutput.dtx: Avoid deadcycles error building float pages - with negative sized floats + with negative sized floats 2016-10-02 David Carlisle @@ -2716,8 +2838,8 @@ All changes above are only part of the development branch for the next release. 2016-01-04 Joseph Wright - * ltfinal.dtx: Drop loading XeTeX character class data, - adjust \newXeTeXintercharclass to allocate from 1 not 4. + * ltfinal.dtx: Drop loading XeTeX character class data, + adjust \newXeTeXintercharclass to allocate from 1 not 4. 2015-12-30 David Carlisle @@ -2729,8 +2851,8 @@ All changes above are only part of the development branch for the next release. 2015-12-10 Joseph Wright - * ltfinal.dtx: Load Unicode settings via new common system - (generic package "unicode-data"). + * ltfinal.dtx: Load Unicode settings via new common system + (generic package "unicode-data"). 2015-12-02 David Carlisle @@ -2780,10 +2902,10 @@ All changes above are only part of the development branch for the next release. 2015-10-02 Joseph Wright - * ltvers.dtx: PL1 + * ltvers.dtx: PL1 - * ltdirchk.dtx: Allow for full reversal of LuaTeX support - * ltluatex.dtx + * ltdirchk.dtx: Allow for full reversal of LuaTeX support + * ltluatex.dtx ######################### # 2015/10/01 Release @@ -2833,12 +2955,12 @@ All changes above are only part of the development branch for the next release. 2015-08-06 Joseph Wright - * Store Unicode data more efficiently + * Store Unicode data more efficiently 2015-07-30 Joseph Wright * README.txt: Retain extension when releasing - (CTAN policy change) + (CTAN policy change) ######################### @@ -2864,18 +2986,18 @@ All changes above are only part of the development branch for the next release. * ltfinal.dtx: set version to 2015/01/01 PL 1, and remove ltpatch.ltx system. - * ltfsscmp.dtx: use 0000/00/00 date for old version. + * ltfsscmp.dtx: use 0000/00/00 date for old version. 2015-06-20 Joseph Wright - * ltunicode.dtx: Include first token in a range in - catcode settings. + * ltunicode.dtx: Include first token in a range in + catcode settings. 2015-06-19 David Carlisle * ltvers.dtx: date - * ltplain.dtx: remove duplicated (old) definition of \newtoks and + * ltplain.dtx: remove duplicated (old) definition of \newtoks and use -1 for the first upper bound on register types that need a contiguous range so that the allocation is never restarted at 256. @@ -2889,7 +3011,7 @@ All changes above are only part of the development branch for the next release. 2015-05-11 Joseph Wright - * ltunicode.dtx: Apply East Asian catcode settings to LuaTeX + * ltunicode.dtx: Apply East Asian catcode settings to LuaTeX 2015-05-10 @@ -2955,7 +3077,7 @@ All changes above are only part of the development branch for the next release. 2015-02-22 * latex209.dtx: Dropped \@no@font@optfalse in various places - - no longer provided by ltfsscmp.dtx. + - no longer provided by ltfsscmp.dtx. 2015-02-22 @@ -3013,7 +3135,7 @@ All changes above are only part of the development branch for the next release. 2015-01-14 David Carlisle * ltspace.dtx: Modify \addpenalty so it doesn't add redundant - skips (+ and - the same value) + skips (+ and - the same value) * fixltx2e.dtx: remove code from fixltx2e, add a stub package warning. @@ -3056,7 +3178,7 @@ All changes above are only part of the development branch for the next release. * latexversion.dtx: New option handling * ltvers.dtx: define \IncludeInRelease and latexvesrsion date - docstrip guards + docstrip guards 2015-01-03 Joseph Wright @@ -3096,8 +3218,8 @@ All changes above are only part of the development branch for the next release. 2014-11-07 Joseph Wright - * Rename 00readme.txt to README (named README.txt in the development - repository) + * Rename 00readme.txt to README (named README.txt in the development + repository) ###################### # 2014/05/01 Release @@ -3141,7 +3263,7 @@ All changes above are only part of the development branch for the next release. 2014-04-30 David Carlisle * inputenc.dtx: Allow (x-)ascii and utf8x aliases for utf8 in - xetex/luatex + xetex/luatex 2014-04-27 @@ -3200,7 +3322,7 @@ All changes above are only part of the development branch for the next release. 2011-02-24 Frank Mittelbach * lppl.tex: removed spurious \null from the source that generates - an empty line. + an empty line. 2010-08-17 Frank Mittelbach @@ -3221,7 +3343,7 @@ All changes above are only part of the development branch for the next release. 2009-10-20 Will Robertson - * ltfssdcl.dtx: Improve the definition of \in@ thanks to Heiko + * ltfssdcl.dtx: Improve the definition of \in@ thanks to Heiko ###################### # 2009/09/24 Release @@ -3251,12 +3373,12 @@ All changes above are only part of the development branch for the next release. 2007-10-29 Frank Mittelbach * exscale.dtx: Use box 0 within group to avoid changing this - scratch register (some bug reported on ctt) + scratch register (some bug reported on ctt) 2007-10-19 Frank Mittelbach * classes.dtx: Explain why \@mkboth is insde the heading - arg for \tableofcontents (pr/3285 and pr/3984) + arg for \tableofcontents (pr/3285 and pr/3984) 2007-08-31 Frank Mittelbach @@ -3424,7 +3546,7 @@ All changes above are only part of the development branch for the next release. 2004-07-23 Frank Mittelbach * doc.dtx: environment names incorrectly sorted in - index (pr/3615) + index (pr/3615) 2004-05-08 Frank Mittelbach @@ -3472,13 +3594,13 @@ All changes above are only part of the development branch for the next release. 2004-02-16 Frank Mittelbach * classes.dtx (section*{\indexname}]): Moved setting of \columnsep and - \columnseprule later to avoid affecting the wrong page (pr/3616) + \columnseprule later to avoid affecting the wrong page (pr/3616) 2004-02-15 Chris Rowley * ltspace.dtx - Added better \nobreakdashes + Added better \nobreakdashes 2004-02-13 Frank Mittelbach @@ -3498,7 +3620,7 @@ All changes above are only part of the development branch for the next release. * utf8ienc.dtx: no newlines in error messages allowed (due to inputenc) space in the wrong place "\count @64" - added commands already defined in the kernel (found by BG) + added commands already defined in the kernel (found by BG) added test file pr/3480 2004-02-04 Frank Mittelbach @@ -3512,31 +3634,31 @@ All changes above are only part of the development branch for the next release. * ltoutput.dtx - Small fix for \enlargethispage, pr/3528 + Small fix for \enlargethispage, pr/3528 2004-02-02 Chris Rowley * inputenc.dtx - Tidied up a bit more of the code + Tidied up a bit more of the code 2004-02-02 Chris Rowley * fontdef.dtx - Many math things made robust + Many math things made robust - Added two `bigtriangle synonyms' for compatibility with the - stmaryrd symbols package + Added two `bigtriangle synonyms' for compatibility with the + stmaryrd symbols package 2004-02-02 Chris Rowley * ltoutenc.dtx - Added \textbigcircle to OMS + Added \textbigcircle to OMS - Fixed bad bug in \DeclareTextSymbol as per Heiko - in pr/3563 + Fixed bad bug in \DeclareTextSymbol as per Heiko + in pr/3563 2004-02-02 Chris Rowley @@ -3590,7 +3712,7 @@ All changes above are only part of the development branch for the next release. 2003-12-16 Frank Mittelbach * ltoutput.dtx: Ensure that \@elt has a defined - state in \@makecol (pr/3586) + state in \@makecol (pr/3586) 2003-12-11 Frank Mittelbach @@ -3716,9 +3838,9 @@ All changes above are only part of the development branch for the next release. being too old (though in fact it is 30 months) * ltoutenc.dtx: Corrected \cs{c} for T1 (pr/3442) - Added \cs{textbardbl} (pr/3400) + Added \cs{textbardbl} (pr/3400) Definition of \textexclamdown changed (pr/3368) - Definition of \textquestiondown changed (pr/3368) + Definition of \textquestiondown changed (pr/3368) Changed def for \textregistered to avoid small caps (pr/3420) 2002-06-16 Frank Mittelbach @@ -3742,9 +3864,9 @@ All changes above are only part of the development branch for the next release. 2001-07-12 Chris Rowley - * inputenc.dtx: + * inputenc.dtx: - Added latin9.def (from Karsten Tinnefeld) + Added latin9.def (from Karsten Tinnefeld) 2001-07-12 Chris Rowley @@ -3782,20 +3904,20 @@ All changes above are only part of the development branch for the next release. * ltoutenc.dtx - Added \NeedsTeXFormat{LaTeX2e}[2000/06/01] to .def - files, pr/3255 + Added \NeedsTeXFormat{LaTeX2e}[2000/06/01] to .def + files, pr/3255 - Made compatible T1 and OT1 accents (on i and \i), pr/3295 + Made compatible T1 and OT1 accents (on i and \i), pr/3295 2001-05-28 Chris Rowley * usrguide.tex - Described short-form for guillemets in T1 encoding, pr/3192 + Described short-form for guillemets in T1 encoding, pr/3192 2001-05-28 Chris Rowley - * ltxguide.cls: + * ltxguide.cls: Added some definitions @@ -3889,9 +4011,9 @@ All changes above are only part of the development branch for the next release. 2000-07-31 Chris Rowley - * ltoutput.dtx: + * ltoutput.dtx: - Changed handling of space above footnotes. + Changed handling of space above footnotes. 2000-07-29 Frank Mittelbach @@ -3937,13 +4059,13 @@ All changes above are only part of the development branch for the next release. 2000-06-01 Chris Rowley - * ltpage.dtx: + * ltpage.dtx: - Changed grouping method in \markboth and \markright - (see also pr/3203) + Changed grouping method in \markboth and \markright + (see also pr/3203) - Less expansion by using token register in \markboth - and \markright + Less expansion by using token register in \markboth + and \markright 2000-05-26 Frank Mittelbach @@ -3953,14 +4075,14 @@ All changes above are only part of the development branch for the next release. 2000-05-22 Chris Rowley - * doc.dtx: + * doc.dtx: - Less obscure wording at start of index? (pr/3202) + Less obscure wording at start of index? (pr/3202) - * inputenc.dtx: + * inputenc.dtx: - Added latin2 option for textdegree (pr/3207) - Updated documantaion + Added latin2 option for textdegree (pr/3207) + Updated documantaion * ltpage.dtx: reimplementation of \markboth and \markright to avoid problem with expanion at wrong point in time in some cases @@ -4008,7 +4130,7 @@ All changes above are only part of the development branch for the next release. 2000-01-07 Rainer Schoepf * ltmiscen.dtx: Disable hyphenation in verbatim even if the font - allows it. + allows it. 1999-12-19 Frank Mittelbach @@ -4048,7 +4170,7 @@ All changes above are only part of the development branch for the next release. 1999-10-28 Frank Mittelbach * ltoutenc.dtx (subsubsection{Declaration commands}): - Give \accent@spacefactor a default definition to prevent horrible + Give \accent@spacefactor a default definition to prevent horrible death in case or incorrect input (pr/3084) 1999-10-26 Frank Mittelbach @@ -4175,7 +4297,7 @@ All changes above are only part of the development branch for the next release. 1999-05-09 Frank Mittelbach * cmfonts.fdd: docstrip `nowarn' guard was the wrong way around - for font OT1/cmr/bx/ui (pr/3036) + for font OT1/cmr/bx/ui (pr/3036) 1999-04-04 Frank Mittelbach @@ -4183,21 +4305,21 @@ All changes above are only part of the development branch for the next release. 1999-04-02 Chris Rowley - * inputenc.dtx + * inputenc.dtx - Corrected cp852 for pr/2992 + Corrected cp852 for pr/2992 - * ltboxex.dtx + * ltboxex.dtx - Made robust the flag in \@iiiparbox: pr/2975} + Made robust the flag in \@iiiparbox: pr/2975} - * ltdefns.dtx + * ltdefns.dtx - Fixed new version of \@yargdef: pr/3013 + Fixed new version of \@yargdef: pr/3013 - * usrguide.tex + * usrguide.tex - Added to documentation of uc/lc list + Added to documentation of uc/lc list 1999-03-22 Rainer Schoepf @@ -4205,11 +4327,11 @@ All changes above are only part of the development branch for the next release. 1999-03-12 Chris Rowley - * clsguide.tex + * clsguide.tex Added to documentation of options - * cyrguide.tex: + * cyrguide.tex: Further editing @@ -4231,7 +4353,7 @@ All changes above are only part of the development branch for the next release. 1999-03-03 Chris Rowley - * ltxguide.cls: + * ltxguide.cls: Added some definitions @@ -4247,7 +4369,7 @@ All changes above are only part of the development branch for the next release. * handbuch.err: Added. * install.txt: Add link to truetex.txt and vtex.txt. Remove - timings for slow computers. + timings for slow computers. 1999-02-27 Frank Mittelbach @@ -4282,7 +4404,7 @@ All changes above are only part of the development branch for the next release. 1999-02-10 Rainer Schoepf - * letter.dtx: Reset footnote counter for every new letter (PR + * letter.dtx: Reset footnote counter for every new letter (PR 2957). 1999-02-09 Chris Rowley @@ -4351,10 +4473,10 @@ All changes above are only part of the development branch for the next release. * bugs.txt: Added description how to follow up a problem report. * latexbugs.tex: Added description how to follow up a problem - report. + report. * classes.dtx: Added check of @noskipsec switch in \part for - article class. + article class. 1999-01-07 Frank Mittelbach @@ -4367,7 +4489,7 @@ All changes above are only part of the development branch for the next release. 1999-01-06 Rainer Schoepf * emtextds.txt: Added to distribution. Installation procedure for - Walter Schmidt's emTeX/TDS for OS/2. + Walter Schmidt's emTeX/TDS for OS/2. * ltoutenc.dtx: Minor documentation fix (PR 2939). @@ -4387,24 +4509,24 @@ All changes above are only part of the development branch for the next release. 1999-01-05 Rainer Schoepf * fontdef.dtx: Need special protection for character - \texttt{\char62} in \cs{changes} entry, as this is the makeindex - actualchar. + \texttt{\char62} in \cs{changes} entry, as this is the makeindex + actualchar. 1998-12-28 Rainer Schoepf * doc.dtx: The case-changing trick in the definition of - \short@macro didn't work, as the category code was changed inside - the macro replacement text, not during the definition. + \short@macro didn't work, as the category code was changed inside + the macro replacement text, not during the definition. 1998-12-27 Rainer Schoepf * doc.dtx (subsection{Macros for generating index entries}): Use - \string, not \protect in argument of \special@index. + \string, not \protect in argument of \special@index. 1998-12-20 Frank Mittelbach * doc.dtx (subsection{Macros for generating index entries}): - Correctly handle second index entry for \SpecialMainEnvIndex + Correctly handle second index entry for \SpecialMainEnvIndex by using \special@index not \index (pr/2928) 1998-12-01 Frank Mittelbach @@ -4431,7 +4553,7 @@ All changes above are only part of the development branch for the next release. 1998-09-17 Frank Mittelbach * cfgguide.tex (section Configuration files for - standard packages and classes]): + standard packages and classes]): added info about ltnews.cfg (pr/2875) * ltoutenc.dtx: Explicitly set \spacefactor after \accent in @@ -4446,10 +4568,10 @@ All changes above are only part of the development branch for the next release. 1998-08-17 Rainer Schoepf * (Various source files): Replaced old form `commandname by - \cs{commandname} in changes entries. + \cs{commandname} in changes entries. * (Various source files): Replaced \cmd{\commandname} by - \cs{commandname} in changes entries. + \cs{commandname} in changes entries. * ltfssdcl.dtx: Corrected documentation glitch in changes entry. @@ -4496,7 +4618,7 @@ All changes above are only part of the development branch for the next release. Fixed wrong code in \t Added masc/fem ords defaults Swapped acutedbl and gravedbl in TS1 - Renamed macron in TS1 + Renamed macron in TS1 * pict2e.dtx: @@ -4556,8 +4678,8 @@ All changes above are only part of the development branch for the next release. 1998-05-13 Rainer Schoepf * lttab.dtx Use \setlength to set size of p-column and for - argument of tabular* environment, so that the benefits of the - calc package apply. + argument of tabular* environment, so that the benefits of the + calc package apply. 1998-05-10 Frank Mittelbach @@ -4636,8 +4758,8 @@ All changes above are only part of the development branch for the next release. 1998-03-27 Frank Mittelbach * cmfonts.fdd: added substiution for cmss/bx/sc to produce - cmr/m/sc; much better would be to have the real thing --- - anybody cares to contribute those to the ec fonts? (pr2586) + cmr/m/sc; much better would be to have the real thing --- + anybody cares to contribute those to the ec fonts? (pr2586) 1998-03-20 Frank Mittelbach @@ -4668,7 +4790,7 @@ All changes above are only part of the development branch for the next release. 1998-02-06 Frank Mittelbach * inputenc.dtx: fixed typo iso-8859-5 should have been iso-8859-9 - (pr/2748) + (pr/2748) 1998-01-31 Chris Rowley @@ -4687,16 +4809,16 @@ All changes above are only part of the development branch for the next release. anything to the stripped file (pr/2726) * ltclass.dtx: make \& locally safe in \ProvidesFile /2702 - fix up pkgindoc.sty which probably hasn't worked since - {v1.0p}{1995/05/25}{Delete \cs{filec@ntents} after preamble} + fix up pkgindoc.sty which probably hasn't worked since + {v1.0p}{1995/05/25}{Delete \cs{filec@ntents} after preamble} 1998-01-16 David Carlisle * ltoutenc.dtx: Fix \t for latex/2734. * ltclass.dtx: make \& locally safe in \ProvidesFile /2702 - fix up pkgindoc.sty which probably hasn't worked since - {v1.0p}{1995/05/25}{Delete \cs{filec@ntents} after preamble} + fix up pkgindoc.sty which probably hasn't worked since + {v1.0p}{1995/05/25}{Delete \cs{filec@ntents} after preamble} 1998-01-16 David Carlisle @@ -4768,7 +4890,7 @@ All changes above are only part of the development branch for the next release. Changed \mathdegree to \textdegree \inputencoding now works only in vmode Temporarily fixed \IeC - Merged latin1 code with ansinew/cp1252 + Merged latin1 code with ansinew/cp1252 Changed `\k{}' to `\k\ ' Added textcomp package Corrections and additions to documentation @@ -4786,7 +4908,7 @@ All changes above are only part of the development branch for the next release. * doc.dtx: Fix small documentation glitch. * ltpatch.ltx: Replace reference to ,,June'' release by ,,last'' - release. + release. 1997-12-17 David Carlisle @@ -4801,13 +4923,13 @@ All changes above are only part of the development branch for the next release. 1997-12-15 Rainer Schoepf * clsguide.tex (section{Upgrading \LaTeX~2.09 classes and - packages}): Added documentation for \if@compatibility switch - (supplied by Barbara Beeton). + packages}): Added documentation for \if@compatibility switch + (supplied by Barbara Beeton). 1997-12-11 Rainer Schoepf * usrguide.tex (subsection{\LaTeXe---The new \LaTeX~release}): - Improved the sentence about formerly separate formats. + Improved the sentence about formerly separate formats. * ltoutput.dtx: Documentation fixes. @@ -4821,11 +4943,11 @@ All changes above are only part of the development branch for the next release. * ltnews08.tex: - Revised text + Revised text * ltnews.cls: - Added definition environment + Added definition environment 1997-11-23 David Carlisle @@ -4883,23 +5005,23 @@ All changes above are only part of the development branch for the next release. 1997-10-21 Rainer Schoepf * ltfssbas.dtx: Added \makeatletter to \nfss@catcodes (and removed - it from \try@load@font@shape). + it from \try@load@font@shape). * ltdefns.dtx: Change \renew@command to use \begingroup/\endgroup - for grouping, to avoid generation of empty math atoms. + for grouping, to avoid generation of empty math atoms. 1997-10-20 Rainer Schoepf * ltfinal.dtx: Removed \aa and \AA from \@uclclist as these are - macros. + macros. * slifonts.fdd(ullasy.fd): Removed superfluous pair of braces at - end of \DeclareFontFamily command. + end of \DeclareFontFamily command. 1997-10-17 Rainer Schoepf * ltfntcmd.dtx: Moved check for vertical mode from - \DeclareTextFontCommand to \check@nocorr@. + \DeclareTextFontCommand to \check@nocorr@. 1997-10-14 David Carlisle @@ -4912,7 +5034,7 @@ All changes above are only part of the development branch for the next release. * patches.txt: --release--date--goes--here-- * Makefile: install.txt patches.txt ltpatch.ltx - --release--date--goes--here-- + --release--date--goes--here-- 1997-10-11 David Carlisle @@ -4940,13 +5062,13 @@ All changes above are only part of the development branch for the next release. 1997-10-08 Rainer Schoepf * ltlogos.dtx: Simplified macro \LaTeX: use only \check@mathfonts - to force loading of fonts suitable for the letter `A'. + to force loading of fonts suitable for the letter `A'. 1997-10-06 Rainer Schoepf * ltcounts.dtx: Replaced \@Roman by a new version that is fully - expandable, so that the correct sequence of letters is written to - files. + expandable, so that the correct sequence of letters is written to + files. 1997-09-30 Johannes Braams @@ -4966,7 +5088,7 @@ All changes above are only part of the development branch for the next release. 1997-09-09 Frank Mittelbach * ltdefns.dtx: Use \begingroup \endgroup instead of { ... } - to avoid generating math ords if used in math mode. (pr/2573) + to avoid generating math ords if used in math mode. (pr/2573) 1997-09-08 Frank Mittelbach @@ -4976,28 +5098,28 @@ All changes above are only part of the development branch for the next release. 1997-08-19 Rainer Schoepf * inputenc.dtx(latin2.def,cp852.def): Replaced \dh and \DH by \dj - and \DJ. + and \DJ. * inputenc.dtx(ansinew.def): Exchanged codes for \textendash and - \textemdash. + \textemdash. * inputenc.dtx: Enclosed all encoding definition files by - \makeatletter/\makeatother. + \makeatletter/\makeatother. 1997-08-15 Rainer Schoepf * slides.dtx: Added initialization of \leftmargin to \@listi - (obviously forgotten and never noticed before). + (obviously forgotten and never noticed before). 1997-08-05 Rainer Schoepf * ltoutenc.dtx: Corrected order of arguments in \UseTextSymbol - example (PR latex/2572). + example (PR latex/2572). 1997-07-31 Rainer Schoepf * cfgguide.tex: Put braces around argument of \sffamily, - to keep latex2html happy. + to keep latex2html happy. 1997-07-20 Frank Mittelbach @@ -5021,7 +5143,7 @@ All changes above are only part of the development branch for the next release. * slides.ins: Replaced slides.fdd by slifonts.fdd. * slides.fdd: Renamed to slifonts.fdd, there is a name clash with - slides.dtx when run through LaTeX. + slides.dtx when run through LaTeX. * truetex.txt: New version by Richard Kinch. @@ -5186,7 +5308,7 @@ All changes above are only part of the development branch for the next release. internal/2513 * latexbug.tex: Fix save stack problem, internal/2514, and - other minor improvements. + other minor improvements. 1997-06-02 David Carlisle @@ -5195,10 +5317,10 @@ All changes above are only part of the development branch for the next release. 1997-05-26 Rainer Schoepf * slides.fdd: Removed spaces in and around arguments to - \DeclareFontShape. + \DeclareFontShape. * cmfonts.fdd: Removed spaces in and around arguments to - \DeclareFontShape and \EC@family. + \DeclareFontShape and \EC@family. 1997-05-22 Rainer Schoepf @@ -5206,7 +5328,7 @@ All changes above are only part of the development branch for the next release. the logo works with non-zero values of \mathsurround. * ltfsstrc.dtx (section{Handling Options}): Replaced \\ by - \MessageBreak in Option `pausing' (suggested by Donald Arseneau). + \MessageBreak in Option `pausing' (suggested by Donald Arseneau). 1997-05-10 Chris Rowley @@ -5226,11 +5348,11 @@ All changes above are only part of the development branch for the next release. Added latin3.def Some rearrangments - Removed long lines + Removed long lines * ltspace.dtx - Made \newline robust + Made \newline robust * ltoutenc.dtx @@ -5443,9 +5565,9 @@ All changes above are only part of the development branch for the next release. * inputenc.dtx: resend patch from Sept 11 - Added ts1enc.def (but it is not unpacked) + Added ts1enc.def (but it is not unpacked) Changed copyright, underscore (\_) and registered - Added \leavevmode to compwordmark + Added \leavevmode to compwordmark Added hex index tabs (experimental) 1996-11-05 Chris Rowley @@ -5463,13 +5585,13 @@ All changes above are only part of the development branch for the next release. * ltplain.dtx: - Use \hbox to in \dotfill + Use \hbox to in \dotfill 1996-11-04 Rainer Schoepf * lterror.dtx (autoload version): Move \@nodocument into kernel, - so that it can be \let to \relax in \begin{document}. + so that it can be \let to \relax in \begin{document}. 1996-11-01 David Carlisle @@ -5503,22 +5625,22 @@ All changes above are only part of the development branch for the next release. * ltoutenc.dtx - Removed defs of \aa \AA - Removed \@strip@args (no longer used) - Corrected documentation + Removed defs of \aa \AA + Removed \@strip@args (no longer used) + Corrected documentation * inputenc.dtx - Added cp865.def - Added \textasteriskcentered - Removed \aa \AA as internal forms - Other minor additions and corrections to .def files + Added cp865.def + Added \textasteriskcentered + Removed \aa \AA as internal forms + Other minor additions and corrections to .def files * ltplain.dtx Removed math from \dotfill - Added \aa and \AA - Updated and corrected documention + Added \aa and \AA + Updated and corrected documention 1996-10-25 Chris Rowley @@ -5536,7 +5658,7 @@ All changes above are only part of the development branch for the next release. Added local settings of flags in \@arrayparboxrestore: dangerous! - Used \@setminipage in minipages + Used \@setminipage in minipages * ltfloat.dtx: @@ -5560,14 +5682,14 @@ All changes above are only part of the development branch for the next release. * ltlists.dtx - Use \setboz\z@ to remove parindent in \@item + Use \setboz\z@ to remove parindent in \@item Set \clubpenalty correctly in \@item Do not reset \@nobreak unconditionally Added documentation * ltsect.dtx - Use \setboz\z@ to remove parindent in \@xsect + Use \setboz\z@ to remove parindent in \@xsect Added documentation 1996-10-23 David Carlisle @@ -5611,7 +5733,7 @@ All changes above are only part of the development branch for the next release. 1996-10-11 David Carlisle * ds/docstrip.dtx: Add initex support, and - auto setting of \batchfile from \jobname to the new + auto setting of \batchfile from \jobname to the new `TDS' version from Marcin. 1996-10-09 David Carlisle @@ -5671,21 +5793,21 @@ All changes above are only part of the development branch for the next release. * ltspace.dtx - Added \@xobeysp linked to \nobreakspace + Added \@xobeysp linked to \nobreakspace 1996-09-26 Rainer Schoepf * cmfonts.ins: Added guard `nowarn' to generation of OT1cmtt.fd - file, to avoid annoying substitution messages if a bold typewriter - font is selected (as, for example, in section headings). + file, to avoid annoying substitution messages if a bold typewriter + font is selected (as, for example, in section headings). * newdc.ins: Added guard `nowarn' to generation of T1cmtt.fd file, - to avoid annoying substitution messages if a bold typewriter font - is selected (as, for example, in section headings). + to avoid annoying substitution messages if a bold typewriter font + is selected (as, for example, in section headings). * cmfonts.fdd (subsubsection{Computer Modern Typewriter}), Added - silent substitutions for T1 bold extended typewriter fonts (new - version). + silent substitutions for T1 bold extended typewriter fonts (new + version). 1996-09-21 Chris Rowley @@ -5858,8 +5980,8 @@ All changes above are only part of the development branch for the next release. * clsguide.tex: - Updated for new release - General minor edits + Updated for new release + General minor edits 1996-06-13 David Carlisle @@ -5900,18 +6022,18 @@ All changes above are only part of the development branch for the next release. * ltnews05.tex: - Revised text + Revised text * ltnews.cls: - Changed fonts for lw35 option, for logical and aesthetic - reasons - Added support for T1 encoding with lw35 option - Corrected grammar in footer + Changed fonts for lw35 option, for logical and aesthetic + reasons + Added support for T1 encoding with lw35 option + Corrected grammar in footer * fntguide.tex: - Updated for new release + Updated for new release 1996-06-06 David Carlisle @@ -5930,7 +6052,7 @@ All changes above are only part of the development branch for the next release. 1996-06-04 Rainer Schoepf * ltmiscen.dtx: \verbatim@noligs@list now processed after - \dospecials (PR 2138). + \dospecials (PR 2138). 1996-06-03 Chris Rowley @@ -5959,14 +6081,14 @@ All changes above are only part of the development branch for the next release. 1996-05-23 Chris Rowley - * ltoutenc.dtx + * ltoutenc.dtx - Extra documentation + Extra documentation - * ltoutput.dtx + * ltoutput.dtx - Changed test for a text page full of floats - Tidied documentation + Changed test for a text page full of floats + Tidied documentation 1996-05-23 David Carlisle @@ -6001,23 +6123,23 @@ All changes above are only part of the development branch for the next release. 1996-05-17 Chris Rowley - * fontdef.dtx + * fontdef.dtx - Removed \@@sqrt + Removed \@@sqrt - * slides.dtx + * slides.dtx - Removed \@@sqrt + Removed \@@sqrt 1996-05-17 David Carlisle * slides.fdd: Force \hyphenchar of OT1 fonts to 45, in case - \defaulthyphenchar has changed. - Remove some spurious extra empty arguments to \DeclareFontFamily + \defaulthyphenchar has changed. + Remove some spurious extra empty arguments to \DeclareFontFamily * cmfonts.fdd: Force \hyphenchar of OT1 fonts to 45, in case - \defaulthyphenchar has changed. - Remove some spurious extra empty arguments to \DeclareFontFamily + \defaulthyphenchar has changed. + Remove some spurious extra empty arguments to \DeclareFontFamily * ltfiles.dtx: Add \write\m@ne{} to \nofiles so that \label (and other things) don't change the vertical spacing when @@ -6025,13 +6147,13 @@ All changes above are only part of the development branch for the next release. 1996-05-09 Chris Rowley - * ltfntcmd.dtx + * ltfntcmd.dtx - Made more robust to errors + Made more robust to errors - * slides.dtx + * slides.dtx - Made \include mechanism work + Made \include mechanism work 1996-05-09 David Carlisle @@ -6134,7 +6256,7 @@ All changes above are only part of the development branch for the next release. problems with combinations of \PageIndex \makeindex etc. pr/2048 * letter.dtx: - Made redefinition of \vspace robust. pr/2049 + Made redefinition of \vspace robust. pr/2049 Nevertheless, they syntax used in the pr is considered incorrect! @@ -6153,7 +6275,7 @@ All changes above are only part of the development branch for the next release. 1996-01-10 David Carlisle * ltfiles.dtx: latex/2024 ensure setting \input@path does not - change behaviour of ##1 in \IfFileExists. + change behaviour of ##1 in \IfFileExists. 1996-01-03 Frank Mittelbach @@ -6191,130 +6313,130 @@ All changes above are only part of the development branch for the next release. 1995-12-13 Chris Rowley - * copypre.txt + * copypre.txt - New version, removing long lines + New version, removing long lines - * copyins.txt + * copyins.txt - New version, removing long lines + New version, removing long lines - * copyhead.txt + * copyhead.txt - New version, removing long lines + New version, removing long lines - * bugs.txt + * bugs.txt - Additions, updates and corrections + Additions, updates and corrections - * autoload.txt + * autoload.txt - Additions, updates and corrections + Additions, updates and corrections - * texpert.txt + * texpert.txt - Additions, updates and corrections + Additions, updates and corrections - * ltnews.cls + * ltnews.cls - Removed long lines - Changed capitalisation + Removed long lines + Changed capitalisation - * cmfonts.fdd + * cmfonts.fdd - Removed long lines + Removed long lines - * slides.fdd + * slides.fdd - Removed long lines + Removed long lines - * olddc.dst + * olddc.dst - New preambles + New preambles - * newdc.dst + * newdc.dst - New preambles + New preambles - * cmextra.dst + * cmextra.dst - New preambles + New preambles - * cmfonts.dst + * cmfonts.dst - New preambles + New preambles - * latexsym.dst + * latexsym.dst - New preambles + New preambles - * autoload.dst + * autoload.dst - New preambles + New preambles - * unpack2e.ins + * unpack2e.ins - New preambles + New preambles - * slides.dst + * slides.dst - New preambles + New preambles - * legal.txt + * legal.txt - New version + New version - * readme.txt + * readme.txt - New version + New version - * ltclass.dtx + * ltclass.dtx - Documentation added + Documentation added - * fontdef.dtx + * fontdef.dtx - Documentation added + Documentation added - * latex209.dst + * latex209.dst - Smaller batches for old emtex + Smaller batches for old emtex - * modguide.tex + * modguide.tex - Additions, updates and corrections + Additions, updates and corrections - * cfgguide.tex + * cfgguide.tex - Additions, updates and corrections + Additions, updates and corrections - * clsguide.tex + * clsguide.tex - Additions, updates and corrections + Additions, updates and corrections - * fntguide.tex + * fntguide.tex - Additions, updates and corrections + Additions, updates and corrections - * ltx3info.tex + * ltx3info.tex - Additions, updates and corrections + Additions, updates and corrections - * usrguide.tex + * usrguide.tex - Additions, updates and corrections + Additions, updates and corrections - * ltxguide.cls + * ltxguide.cls - Corrected cfg loading + Corrected cfg loading - * inputenc.dtx + * inputenc.dtx - Detailed corrections + Detailed corrections - * ltdefns.dtx + * ltdefns.dtx - Added documentation + Added documentation ###################### # 1995/12/01 Release @@ -6340,7 +6462,7 @@ All changes above are only part of the development branch for the next release. 1995-12-08 Alan Jeffrey - * latex209.dtx: Switched off \@inmathwarn. + * latex209.dtx: Switched off \@inmathwarn. 1995-12-07 David Carlisle @@ -6360,9 +6482,9 @@ All changes above are only part of the development branch for the next release. 1995-12-06 Alan Jeffrey - * encguide.tex: Added examples of new \text* commands. + * encguide.tex: Added examples of new \text* commands. - * usrguide.tex: Added documentation for new \text* commands. + * usrguide.tex: Added documentation for new \text* commands. 1995-12-05 David Carlisle @@ -6378,7 +6500,7 @@ All changes above are only part of the development branch for the next release. 1995-12-05 Alan Jeffrey - * ltoutenc.dtx: Changed text of \TextSymbolUnavailable. + * ltoutenc.dtx: Changed text of \TextSymbolUnavailable. 1995-12-04 David Carlisle @@ -6394,15 +6516,15 @@ All changes above are only part of the development branch for the next release. 1995-12-04 Alan Jeffrey - * inputenc.dst: Added cp437de.def. + * inputenc.dst: Added cp437de.def. - * inputenc.dtx: Added \@tabacckludge commands to the Next encoding. - Replaced ~ by \nobreakspace. - Added a `test version' to the \ProvidesFile. - Made and text char in cp437. - Made a math char in Next. - Made and text chars in all encodings. - Added cp437de (cp437 but with ss rather than beta). + * inputenc.dtx: Added \@tabacckludge commands to the Next encoding. + Replaced ~ by \nobreakspace. + Added a `test version' to the \ProvidesFile. + Made and text char in cp437. + Made a math char in Next. + Made and text chars in all encodings. + Added cp437de (cp437 but with ss rather than beta). 1995-12-01 David Carlisle @@ -6412,10 +6534,10 @@ All changes above are only part of the development branch for the next release. 1995-12-01 Alan Jeffrey - * inputenc.dtx: Removed extraneous {} from the glyphs. + * inputenc.dtx: Removed extraneous {} from the glyphs. - * ltoutenc.dtx: Made \SS a default command rather than making the - OT1 definition the default. + * ltoutenc.dtx: Made \SS a default command rather than making the + OT1 definition the default. 1995-11-30 Johannes Braams @@ -6446,12 +6568,12 @@ All changes above are only part of the development branch for the next release. 1995-11-29 Alan Jeffrey - * ltoutenc.dtx: Added \textless, \textgreater, et al. + * ltoutenc.dtx: Added \textless, \textgreater, et al. - * inputenc.dtx: Replaced \textsterling with \pounds. - Added default error-message definitions for \textyen et al. - Added a \NeedsTeXFormat line. - Tidied up the Next encoding. + * inputenc.dtx: Replaced \textsterling with \pounds. + Added default error-message definitions for \textyen et al. + Added a \NeedsTeXFormat line. + Tidied up the Next encoding. 1995-11-28 David Carlisle @@ -6489,8 +6611,8 @@ All changes above are only part of the development branch for the next release. 1995-11-28 Alan Jeffrey - * ltoutenc.dtx: Added test for math mode to text commands. - Renamed \@changed@x@err to \TextSymbolUnavailable. + * ltoutenc.dtx: Added test for math mode to text commands. + Renamed \@changed@x@err to \TextSymbolUnavailable. 1995-11-27 David Carlisle @@ -6500,9 +6622,9 @@ All changes above are only part of the development branch for the next release. 1995-11-24 Chris Rowley - * ltspace.dtx + * ltspace.dtx - \nobreakspace added + \nobreakspace added 1995-11-22 David Carlisle @@ -6519,7 +6641,7 @@ All changes above are only part of the development branch for the next release. * ltnews04.tex: New TUG Address, \LoadClassWithOptions * doc.dtx: Make \MakeShortVerb use an \PackageInfo rather - than \tyepout. internal/1938 + than \tyepout. internal/1938 1995-11-18 David Carlisle @@ -6530,21 +6652,21 @@ All changes above are only part of the development branch for the next release. 1995-11-17 David Carlisle * docstrip.dtx: Merge in Marcin's new code restoring - \inFileName functionality. - Remove generation date/version number from generated files - Add \AddGenerationDate batchfile command to put them back. - Force whole file through ispell!! + \inFileName functionality. + Remove generation date/version number from generated files + Add \AddGenerationDate batchfile command to put them back. + Force whole file through ispell!! * ltoutenc.dtx: Use \@wrong@font@char in \UseTextSymbol. /1676 * ltfssbas.dtx: Make missing fd file \typeout a Font Info - and add \@wrong@font@char for use in \UseTextSymbol. /1676 - Clean up many \changes entries. + and add \@wrong@font@char for use in \UseTextSymbol. /1676 + Clean up many \changes entries. 1995-11-15 David Carlisle * source2e.tex: Exchange order of ltdefns and ltalloc - (Matches code change of 24th May.) + (Matches code change of 24th May.) Modify \changes def to match doc.sty 1.9u 1995-11-14 David Carlisle @@ -6553,9 +6675,9 @@ All changes above are only part of the development branch for the next release. dc fonts are installed. * ltclass.dtx: Add \LoadClassWithOptions for latex/1556 - Add \RequirePackageWithOptions to match. - Stop \@unprocessedoptions complaining about empty options - noticed whilest debugging the above change... + Add \RequirePackageWithOptions to match. + Stop \@unprocessedoptions complaining about empty options + noticed whilest debugging the above change... * inputenc.dtx: remove rogue \endinput. Wrap long lines. @@ -6578,20 +6700,20 @@ All changes above are only part of the development branch for the next release. 1995-11-07 Rainer Schoepf * ltoutenc.dtx (subsection{Definitions for the OT1 encoding}): - Changed \char32 to \@xxxii (two tokens less). Replaced octal - number 27 by decimal number 23 to protect against the quote - character being active. Added \leavevmode at start of \c, - otherwise the output routine might be invoked within the macro - (suggested by Donald Arseneau). Replaced some 0's by \z@ - (faster). + Changed \char32 to \@xxxii (two tokens less). Replaced octal + number 27 by decimal number 23 to protect against the quote + character being active. Added \leavevmode at start of \c, + otherwise the output routine might be invoked within the macro + (suggested by Donald Arseneau). Replaced some 0's by \z@ + (faster). * ltlists.dtx (\@doendpe): Enclosed \setbox0 assignment by a - group so that it leaves the contents of box $0$ intact. - Discovered by Donald Arseneau. + group so that it leaves the contents of box $0$ intact. + Discovered by Donald Arseneau. * cmfonts.fdd: Use decimal rather than octal character - specification for \hyphenchar and \skewchar so that there is - no problem with an active quote character. + specification for \hyphenchar and \skewchar so that there is + no problem with an active quote character. 1995-11-03 Rainer Schoepf @@ -6627,44 +6749,44 @@ All changes above are only part of the development branch for the next release. 1995-11-02 Chris Rowley - * classes.dtx + * classes.dtx - Made \footnote always work in frontmatter + Made \footnote always work in frontmatter 1995-11-02 David Carlisle * ltfssbas.dtx: Remove spurious space from NFSS font warning - latex/1676 + latex/1676 * ltxdoc.dtx: Add silent font substitutions. 1995-11-02 Rainer Schoepf * latex209.dtx: Added code for fleqn.sty, leqno.sty, - openbib.sty. + openbib.sty. * latex209.dst: Added generation of files fleqn.sty, leqno.sty, - openbib.sty for compatibility mode. + openbib.sty for compatibility mode. * inputenc.dtx: Changed internal name \a to \@tabacckludge to - protect against redefinition by malicicous users. Wrapped long - lines. + protect against redefinition by malicicous users. Wrapped long + lines. * ltoutenc.dtx: Changed internal name \a to \@tabacckludge to - protect against redefinition by malicicous users. + protect against redefinition by malicicous users. 1995-11-01 David Carlisle * latexbug.tex: Only list `configuration' input files. * ltfinal.dtx: Modify \@addtofilelist during initex so only - non-standard (cfg) inputs listed. + non-standard (cfg) inputs listed. * ltfssini.dtx: Modify \@addtofilelist during initex so only - non-standard (cfg) inputs listed. + non-standard (cfg) inputs listed. * ltdirchk.dtx: Modify \@addtofilelist during initex so only - non-standard (cfg) inputs listed. + non-standard (cfg) inputs listed. * Makefile: Add newdc/olddc @@ -6675,7 +6797,7 @@ All changes above are only part of the development branch for the next release. * cmfonts.dst: remove dc font generation. * olddc.dst: NEW: Generate fd files for obsolete dcfonts 1.1 - and earlier. + and earlier. * newdc.dst: NEW: Generate fd files for dcfonts 1.2 @@ -6687,7 +6809,7 @@ All changes above are only part of the development branch for the next release. * ltboxes.dtx: CHANGE: Add \nobreak to \@finalstrut to allow hyphenation of the last word of a p-column (and footnotes). - internal/1931 + internal/1931 * ltdirchk.dtx: more robust checking of dc fonts. @@ -6717,7 +6839,7 @@ All changes above are only part of the development branch for the next release. 1995-10-27 David Carlisle * ltpictur.dtx: Initialise \@wholewidth in autoload kernel. - General doc cleanup. + General doc cleanup. * usrguide.tex: Describe minimal.cls @@ -6729,14 +6851,14 @@ All changes above are only part of the development branch for the next release. 1995-10-25 Chris Rowley - * ltfloat.dtx + * ltfloat.dtx - Corrected bug in \end@dblfloat, made code more robust + Corrected bug in \end@dblfloat, made code more robust 1995-10-25 David Carlisle * ltmath.dtx: modify docstrip guards so - \ProvidesFile{ltmath.dtx} seen by source2e.tex. + \ProvidesFile{ltmath.dtx} seen by source2e.tex. * ltidxglo.dtx: General doc cleanup. @@ -6746,57 +6868,57 @@ All changes above are only part of the development branch for the next release. 1995-10-24 Chris Rowley - * ltfiles.dtx + * ltfiles.dtx - Removed one-way switches from \endocument + Removed one-way switches from \endocument - * ltxref.dtx + * ltxref.dtx - Removed one-way switches from \endocument - Tidying. + Removed one-way switches from \endocument + Tidying. - * ltfssbas.dtx + * ltfssbas.dtx - Removed one-way switches from \endocument + Removed one-way switches from \endocument - * ltbibl.dtx + * ltbibl.dtx - Removed one-way switches from \endocument + Removed one-way switches from \endocument - * ltmiscen.dtx + * ltmiscen.dtx - Removed one-way switches from \endocument - Tidying. + Removed one-way switches from \endocument + Tidying. 1995-10-24 David Carlisle * ltdefns.dtx: Make \@autoload files ignore EOL. * lterror.dtx: modify autoload \@preamerr. - Add % to some lines as \@autoload files now ignore line ends. + Add % to some lines as \@autoload files now ignore line ends. 1995-10-23 Chris Rowley - * lttab.dtx + * lttab.dtx - Made poptabs more robust - Tidied up documentation + Made poptabs more robust + Tidied up documentation 1995-10-23 Rainer Schoepf * classes.dtx (subsubsection{Abstract}): Added setting of - \cs{beginparpenalty} to discourage page break before abstract - heading. + \cs{beginparpenalty} to discourage page break before abstract + heading. 1995-10-22 Rainer Schoepf * cmfonts.fdd: Added support for new (version 1.2) DC fonts and - text companion fonts in encoding TS1. + text companion fonts in encoding TS1. * inputenc.dst: Added generation of ansinew.def file. * inputenc.dtx: Added ansinew encoding (Windows 3.1 ANSI), as - contributed by Berthold K.P. Horn (bkph@ai.mit.edu). + contributed by Berthold K.P. Horn (bkph@ai.mit.edu). 1995-10-20 David Carlisle @@ -6809,19 +6931,19 @@ All changes above are only part of the development branch for the next release. * ltfssbas.dtx: Keep autofss2 code in kernel until \begin{document}. - use \@undefined not \undefined + use \@undefined not \undefined * ltfinal.dtx: \@filelist zapped too early. 1995-10-19 Rainer Schoepf * inputenc.dtx: Replaced \' \` \= by \a' \a` \a in order to get - correct accents in a tabbing environment. + correct accents in a tabbing environment. 1995-10-18 Rainer Schoepf * ltspace.dtx (subsection{Horizontal space}): Moved \changes - from \@ to \hspace where it belongs. + from \@ to \hspace where it belongs. 1995-10-17 David Carlisle @@ -6829,7 +6951,7 @@ All changes above are only part of the development branch for the next release. \reserved@a * ltclass.dtx: Remove \ProvidesFile redefinition to ltfinal. - Reset \CurrentOption in \ProcessOptions for graphics/1873 + Reset \CurrentOption in \ProcessOptions for graphics/1873 * ltdirchk.dtx: Modify \ProvidesFile during initex to save debugging info and not waste \ver@... csnames. @@ -6849,37 +6971,37 @@ All changes above are only part of the development branch for the next release. * ltbibl.dtx: make \cite robust /1808 * ltmath.dtx: Make \sqrt robust /1808 - Use \@testopt in eqnarray's \\ /1911. + Use \@testopt in eqnarray's \\ /1911. * ltspace.dtx: Use \@testopt in \[no]{line|page}preak (/1911) * ltdefns.dtx: new \@ifstar CHANGE: require ##1 in both arguments - not ####1 in one and ##1 in the other. (internal/1910) - Use \@testopt in \newcommand and \newenvironment (/1911) + not ####1 in one and ##1 in the other. (internal/1910) + Use \@testopt in \newcommand and \newenvironment (/1911) * ltboxes.dtx: Clarify \makebox(,)[b] description. * ltthm.dtx: Allow \newtheorem after \begin{document} again. - (LaTeX Book, page 57) + (LaTeX Book, page 57) 1995-10-16 Rainer Schoepf * ltfssini.dtx: Added \relax at the end of the definition of - \normalfont to prevent it and \textnormal from eating up leading - spaces. + \normalfont to prevent it and \textnormal from eating up leading + spaces. 1995-10-11 Chris Rowley - * ltoutput.dtx + * ltoutput.dtx - New check in \clearpage. + New check in \clearpage. 1995-10-10 David Carlisle * ltfssdcl.dtx: autoload error message * ltthm.dtx: Make \newtheorem and its internals `only preamble' - to save memory. + to save memory. * ltplain.dtx: autoload tracing code @@ -6888,7 +7010,7 @@ All changes above are only part of the development branch for the next release. 1995-10-10 Rainer Schoepf * slides.dtx (subsection{The title}): In \maketitle, move \par - inside the scope of \Large, to get even line spacing. + inside the scope of \Large, to get even line spacing. 1995-10-09 David Carlisle @@ -6937,11 +7059,11 @@ All changes above are only part of the development branch for the next release. 1995-10-02 David Carlisle * ltplain.dtx: Move \newif to ltdefns.dtx. - Use \sbox in \underbar (saves tokens, and works with colour) + Use \sbox in \underbar (saves tokens, and works with colour) * ltdefns.dtx: \futurelet with \@let@token for internal/924 New implementation of \@xargdef in terms of the new - \@protected@testopt. Saves tokens and makes user defined + \@protected@testopt. Saves tokens and makes user defined commands with optional arguments robust. internal/1733 Move \newif here from ltplain. Autoload support. Add \aut@global and \@autoload. internal/1617. @@ -6949,26 +7071,26 @@ All changes above are only part of the development branch for the next release. 1995-09-27 David Carlisle * ltdirchk.dtx: Check \filename parser in ltxcheck.tex - for latex/1624 latex/1754 and graphics/1336 + for latex/1624 latex/1754 and graphics/1336 Check for dc fonts in ltxcheck.tex 1995-09-27 Rainer Schoepf * slides.dtx, slides.fdd: Globally replaced scale factor 19.91 - by 19.907 in \DeclareFontShape, as this gives better rounded - font sizes at 600dpi (suggested by Denis Roegel). + by 19.907 in \DeclareFontShape, as this gives better rounded + font sizes at 600dpi (suggested by Denis Roegel). * docstrip.dtx: Changed address of Johannes Braams. 1995-09-25 David Carlisle * latex209.dtx: Declare 2 count registers previously used - in \cline. /1723 + in \cline. /1723 1995-09-25 Rainer Schoepf * web2ctex.txt: Added some comments about using non-csh, index - style files and some other missing files. + style files and some other missing files. 1995-09-21 David Carlisle @@ -6981,8 +7103,8 @@ All changes above are only part of the development branch for the next release. * inputenc.dst: Added generation of next.def file. * inputenc.dtx: Added next encoding, as contributed by - Stefan Ried and Holger Uhr - . + Stefan Ried and Holger Uhr + . 1995-09-20 David Carlisle @@ -6991,19 +7113,19 @@ All changes above are only part of the development branch for the next release. 1995-09-20 Rainer Schoepf * cmextra.dst: Added generation of OMLccm.fd file, which had - previsouly been removed from cmfonts.dst. + previsouly been removed from cmfonts.dst. * slides.dtx: Replace \@tempa by \reserved@a. Wrap some long - lines and use \null instead of \hbox{} (by DPC). + lines and use \null instead of \hbox{} (by DPC). 1995-09-19 Rainer Schoepf * slides.fdd: Corrected names of .fd file names in argument to - \ProvidesFile commands. + \ProvidesFile commands. * ltmiscen.dtx: Moved call to \@noligs macro after call to - \verbatim@font in \verb command, just as it is already in the - verbatim environment. + \verbatim@font in \verb command, just as it is already in the + verbatim environment. 1995-09-15 David Carlisle @@ -7029,9 +7151,9 @@ All changes above are only part of the development branch for the next release. 1995-08-31 Alan Jeffrey - * inputenc.dtx: Added 0 to the beginning of every number. - Changed the definition of "AD in latin1 and latin2 to be \-. - Swapped ordfeminine and ordmasculine around in latin1. + * inputenc.dtx: Added 0 to the beginning of every number. + Changed the definition of "AD in latin1 and latin2 to be \-. + Swapped ordfeminine and ordmasculine around in latin1. 1995-08-27 Frank Mittelbach @@ -7081,15 +7203,15 @@ All changes above are only part of the development branch for the next release. 1995-08-16 Chris Rowley - * tex2.txt: + * tex2.txt: - Clearer wordings + Clearer wordings - * ltcntrl.dtx: + * ltcntrl.dtx: - Made most loop macros \long - Removed unnecessary \...noop macros - Tidied up documentation + Made most loop macros \long + Removed unnecessary \...noop macros + Tidied up documentation 1995-08-16 Frank Mittelbach @@ -7155,25 +7277,25 @@ All changes above are only part of the development branch for the next release. 1995-07-23 Chris Rowley - * clsguide.tex: + * clsguide.tex: - Added notices concerning use of `Standard LaTeX' + Added notices concerning use of `Standard LaTeX' - * cfgguide.tex: + * cfgguide.tex: - Started major expansion and rewrite + Started major expansion and rewrite - * modguide.tex: + * modguide.tex: - Rewrite adding section on modfying LaTeX + Rewrite adding section on modfying LaTeX - * legal.txt: + * legal.txt: - Further expansion and changes + Further expansion and changes - * ltxguide.cls: + * ltxguide.cls: - Changed configuration file messages + Changed configuration file messages 1995-07-20 David Carlisle @@ -7211,9 +7333,9 @@ All changes above are only part of the development branch for the next release. 1995-07-16 Chris Rowley - * ltoutput.dtx: + * ltoutput.dtx: - New version of \@outputpage + New version of \@outputpage 1995-07-14 David Carlisle @@ -7229,7 +7351,7 @@ All changes above are only part of the development branch for the next release. * ltfssbas.dtx: Updates to documentation Use macro rather than switch to flag default font - substitutions pr/1236 + substitutions pr/1236 * ltfiles.dtx: Updates to documentation @@ -7360,67 +7482,67 @@ All changes above are only part of the development branch for the next release. 1995-06-19 David Carlisle * ltbibl.dtx: Modify \bibcite so a repeated key produces - LaTeX Warning: Label `aaa' multiply defined. - ... - LaTeX Warning: There were multiply-defined labels. - instead of - LaTeX Warning: Label(s) may have changed. - Rerun to get cross-references right. + LaTeX Warning: Label `aaa' multiply defined. + ... + LaTeX Warning: There were multiply-defined labels. + instead of + LaTeX Warning: Label(s) may have changed. + Rerun to get cross-references right. * ltxref.dtx: Modify \newlabel so \bibcite can share code. * ltclass.dtx: Stop \documentstyle re-enabling \usepackage - After it has been disabled by latex209.def (latex/1634) + After it has been disabled by latex209.def (latex/1634) 1995-06-18 Chris Rowley - * Makefile: + * Makefile: - Changed to use copypre.txt and copyhead.txt + Changed to use copypre.txt and copyhead.txt - * cfgguide.tex: + * cfgguide.tex: - Configuration stuff transferred from texpert.txt + Configuration stuff transferred from texpert.txt - * autoload.txt: + * autoload.txt: - Tidying, removed long lines + Tidying, removed long lines - * cm*.dst, docstrip.dst,latex*.dst,exscale.dst + * cm*.dst, docstrip.dst,latex*.dst,exscale.dst - New preambles + New preambles - * inputenc.dst,ltoutenc.dst,slides.dst: + * inputenc.dst,ltoutenc.dst,slides.dst: - New preambles + New preambles - * unpack2e.ins: + * unpack2e.ins: - New preambles + New preambles - * copyright.txt: + * copyright.txt: - No longer used + No longer used - * copyins.txt: + * copyins.txt: - New text + New text - * copypre.txt: + * copypre.txt: - New file + New file - * copyhead.txt: + * copyhead.txt: - New file + New file - * copydisf.txt: + * copydisf.txt: - New file + New file - * copydisg.tex: + * copydisg.tex: - New file + New file 1995-06-15 David Carlisle @@ -7431,12 +7553,12 @@ All changes above are only part of the development branch for the next release. * ltfssbas.dtx: Minor documentation edits. * ltfsstrc.dtx: Take \ProvidesFile out of \iffalse clause - so it shows up in \listfiles in source2e.tex. - Wrap some long lines to 72. + so it shows up in \listfiles in source2e.tex. + Wrap some long lines to 72. 1995-06-15 Alan Jeffrey - * ltnews03.tex: Added pointer to autoload.txt. + * ltnews03.tex: Added pointer to autoload.txt. 1995-06-14 David Carlisle @@ -7454,125 +7576,125 @@ All changes above are only part of the development branch for the next release. 1995-06-14 Alan Jeffrey - * inputenc.dst: Fixed typo cp850 -> cp437 + * inputenc.dst: Fixed typo cp850 -> cp437 1995-06-14 Alan Jeffrey - * inputenc.dst: Fixed typo cp850 -> cp437 + * inputenc.dst: Fixed typo cp850 -> cp437 1995-06-13 David Carlisle * ltpictur.dtx: Add \ProvidesFile to autoload file. * ltfinal.dtx: Moddify method of adding patchlevel banner - Force format to be in errorstopmode, even if an installer - scrolled past an error during initex run. + Force format to be in errorstopmode, even if an installer + scrolled past an error during initex run. 1995-06-12 David Carlisle * ltvers.dtx: Add Auotoload banner - Check for old source files (older than a year). + Check for old source files (older than a year). 1995-06-11 Chris Rowley - * legal.txt: + * legal.txt: - Major changes + Major changes - * usrguide.tex: + * usrguide.tex: - Added ltx3info.tex info + Added ltx3info.tex info - * fntguide.tex: + * fntguide.tex: - Added note re using non-cmr fonts in T1 + Added note re using non-cmr fonts in T1 - * clsguide.tex: + * clsguide.tex: - Hash marks in option declarations OK - Added Case cHANGING commands + Hash marks in option declarations OK + Added Case cHANGING commands - * cfgguide.tex: + * cfgguide.tex: - Configuration stuff transferred from texpert.txt + Configuration stuff transferred from texpert.txt - * lablst.tex: + * lablst.tex: - Improved version: lists all bibitems separately - Changed internal commands + Improved version: lists all bibitems separately + Changed internal commands - * Makefile: + * Makefile: - Added modguide.tex + Added modguide.tex - * manifest.txt: + * manifest.txt: - Added ltnews03.tex and modguide.tex + Added ltnews03.tex and modguide.tex - * install.txt: + * install.txt: - File name corrected - Added ltx3info.tex info + File name corrected + Added ltx3info.tex info - * emtex.txt: + * emtex.txt: - Added info re batch file + Added info re batch file - * texpert.txt: + * texpert.txt: - Configuration details transferred to cfgguide.tex + Configuration details transferred to cfgguide.tex - * readme.txt: + * readme.txt: - Added pointers to various other info files + Added pointers to various other info files - * ltspace.dtx: + * ltspace.dtx: - Added \relax to \obeycr + Added \relax to \obeycr 1995-06-09 Alan Jeffrey - * ltoutenc.dtx: Made composites declared with DeclareTextComposite - use no-argument macros rather than one-argument macros. + * ltoutenc.dtx: Made composites declared with DeclareTextComposite + use no-argument macros rather than one-argument macros. - * ltnews03.tex: Changed modify.tex to modguide.tex, updated - figures for space savings. + * ltnews03.tex: Changed modify.tex to modguide.tex, updated + figures for space savings. 1995-06-08 Alan Jeffrey - * ltnews03.tex: New issue of LaTeX News. + * ltnews03.tex: New issue of LaTeX News. 1995-06-06 Alan Jeffrey - * ltfinal.dtx: Made \MakeUppercase and \MakeLowercase grab their - argument and brace it. + * ltfinal.dtx: Made \MakeUppercase and \MakeLowercase grab their + argument and brace it. 1995-06-05 Alan Jeffrey - * ltpatch.ltx: Removed patch for latex/1240 (now in ltoutenc.dtx). - Removed patch for tools/1296 (now in ltoutenc.dtx). - Removed patch for latex/1322 (now in ltoutenc.dtx). - We now have an empty patch file again! + * ltpatch.ltx: Removed patch for latex/1240 (now in ltoutenc.dtx). + Removed patch for tools/1296 (now in ltoutenc.dtx). + Removed patch for latex/1322 (now in ltoutenc.dtx). + We now have an empty patch file again! - * fontdef.dtx: Moved math commands from ltoutenc.dtx. + * fontdef.dtx: Moved math commands from ltoutenc.dtx. - * ltoutenc.dtx: Redid protection in DeclareTextCommand so that it - uses \noexpand rather than \protect. This should stop the - problems with \'\i putting the acute on a \protect rather than - on the \i. Commented out the defaults for textless and - textgreater. Allow \ProvideTextCommandDefault after - \begin{document} so it can be used in inputenc.def files. - Save some tokens in \textvisiblespace and \textunderscore. - Moved math commands to fontdef.dtx. + * ltoutenc.dtx: Redid protection in DeclareTextCommand so that it + uses \noexpand rather than \protect. This should stop the + problems with \'\i putting the acute on a \protect rather than + on the \i. Commented out the defaults for textless and + textgreater. Allow \ProvideTextCommandDefault after + \begin{document} so it can be used in inputenc.def files. + Save some tokens in \textvisiblespace and \textunderscore. + Moved math commands to fontdef.dtx. - * classes.dtx: Replaced \uppercase with \MakeUppercase + * classes.dtx: Replaced \uppercase with \MakeUppercase - * ltfinal.dtx: Added \MakeUppercase and \MakeLowercase. + * ltfinal.dtx: Added \MakeUppercase and \MakeLowercase. 1995-05-30 Alan Jeffrey - * inputenc.dtx: Made hex numbers safe against active ". Added - docstrip commands to applemac.def. + * inputenc.dtx: Made hex numbers safe against active ". Added + docstrip commands to applemac.def. 1995-05-27 Frank Mittelbach @@ -7587,12 +7709,12 @@ All changes above are only part of the development branch for the next release. * ltplain.dtx (section{Plain \TeX}): - Made \loop long - Made \underbar use \box \tw@ + Made \loop long + Made \underbar use \box \tw@ * ltdefns.dtx (subsection{Command definitions}): - Made \@gobble commands \long + Made \@gobble commands \long 1995-05-26 Johannes Braams @@ -7637,27 +7759,27 @@ All changes above are only part of the development branch for the next release. * latex209.dtx: - Changed float reset hooks to empty + Changed float reset hooks to empty * ltfloat.dtx: - Moved new resettings into hooks so that they can be removed in - latex209.dtx + Moved new resettings into hooks so that they can be removed in + latex209.dtx * ltspace.dtx/ltlists.dtx - Moved \endtrivlist and friends to ltlists.dtx + Moved \endtrivlist and friends to ltlists.dtx * ltfiles.dtx (section{File Handling}): - Added check for zero \topskip to \begin{document} - Added some \longs + Added check for zero \topskip to \begin{document} + Added some \longs - * ltspace.dtx + * ltspace.dtx - Made \vspace and \vspace* more efficient and more robust + Made \vspace and \vspace* more efficient and more robust - Commented out unused code + Commented out unused code 1995-05-25 Johannes Braams @@ -7676,14 +7798,14 @@ All changes above are only part of the development branch for the next release. 1995-05-24 David Carlisle * unpack2e.ins: Exchange order of ltdefns and ltalloc - as latter now needs \@gobbletwo from former. + as latter now needs \@gobbletwo from former. * usrguide.tex (subsection{Setting text susperscripts}): - \textsuperscript now access the current font (except for size + \textsuperscript now access the current font (except for size attribute) * ltfloat.dtx: redefine \textsuperscript in terms of - \@textsuperscript + \@textsuperscript * ltdefns.dtx: new \typein implementation @@ -7691,24 +7813,24 @@ All changes above are only part of the development branch for the next release. 1995-05-23 Alan Jeffrey - * inputenc.dst: Added applemac.def. + * inputenc.dst: Added applemac.def. - * inputenc.dtx: Added applemac.def. - Added test for whether definition of a text character ends in a - macro. - Corrected \mathordfeminine and \mathordmasculine. + * inputenc.dtx: Added applemac.def. + Added test for whether definition of a text character ends in a + macro. + Corrected \mathordfeminine and \mathordmasculine. - * inputenc.dst: Added applemac.def. + * inputenc.dst: Added applemac.def. 1995-05-22 David Carlisle * lttab.dtx: Add code and docstrip modules to support - autoloading of tabbing. + autoloading of tabbing. 1995-05-22 Rainer Schoepf * ltplain.dtx/ltfloat.dtx: Moved definitions of \footins and - \footnoterule from ltplain to ltfloat. + \footnoterule from ltplain to ltfloat. 1995-05-21 Frank Mittelbach @@ -7748,7 +7870,7 @@ All changes above are only part of the development branch for the next release. 1995-05-19 David Carlisle * ltpictur.dtx: Add code and docstrip modules to support - autoloading feature. + autoloading feature. 1995-05-19 Frank Mittelbach @@ -7802,7 +7924,7 @@ All changes above are only part of the development branch for the next release. * ltboxes.dtx: Removed surplus { } in \@irsbox * ltlists.dtx: Start of documented version from Tobi. - Removed surplus { } and used `\thr@@' not `3 ' to save tokens. + Removed surplus { } and used `\thr@@' not `3 ' to save tokens. 1995-05-17 Frank Mittelbach @@ -7863,18 +7985,18 @@ All changes above are only part of the development branch for the next release. 1995-05-12 David Carlisle * ltclass.dtx: Use a token register in \DeclareOption(*) - So that # need not be written as ## - INCOMPATIBLE CHANGE: see latex/1557 + So that # need not be written as ## + INCOMPATIBLE CHANGE: see latex/1557 * ltpictur.dtx: Modify \picture so a missing ( in the first argument generates an error. latex/1355 - Add a few more macro environments. + Add a few more macro environments. * latex209.dtx: Restore old definition of \@footnotemark * ltfloat.dtx: Add \nobreak to allow hyphenation before a footnotemark. - Add loads of macro environments to the docs. + Add loads of macro environments to the docs. 1995-05-11 Frank Mittelbach @@ -7930,7 +8052,7 @@ All changes above are only part of the development branch for the next release. 1995-05-06 Frank Mittelbach * ltsect.dtx (paragraph{...}): - Use \quad instead of \hskip 1em in \@seccntformat. pr/1596 + Use \quad instead of \hskip 1em in \@seccntformat. pr/1596 Add \relax to prevent `plus/minus' problem with improper redefinition of \@seccntformat. pr/1596 @@ -7946,14 +8068,14 @@ All changes above are only part of the development branch for the next release. * ltsect.dtx: Surround the . in \@dottedcontextline by \hbox to typeset it in the text - font. pr/1503 + font. pr/1503 Don't reset to \rmfamily just to \normalfont in case the document font is not the roman one. pr/1578 1995-05-01 David Carlisle * ltpar.dtx: Documentation reworked by Tobias Oetiker. - (Thanks to Tobi for volunteering.) + (Thanks to Tobi for volunteering.) 1995-04-29 Frank Mittelbach @@ -7975,7 +8097,7 @@ All changes above are only part of the development branch for the next release. * latex209.dtx: Add \hang and \textindent * ltplain.dtx: Move \hang and \textindent to latex209.dtx - Remove some commands which are (re)defined later. + Remove some commands which are (re)defined later. 1995-04-27 Frank Mittelbach @@ -7987,7 +8109,7 @@ All changes above are only part of the development branch for the next release. * ltmiscen.dtx (subsection{Environments}): Limited support for \AtBeginDocument{\begin{foo}} - \AtEndDocument{\end{foo}}. + \AtEndDocument{\end{foo}}. Be careful to get the order right if you do it more than once. pr/1121 * unpacked.txt: @@ -7996,18 +8118,18 @@ All changes above are only part of the development branch for the next release. 1995-04-25 David Carlisle * ltfiles.dtx: remove \the\every@math@size from \document - for latex/1407 + 1420 (from patch file) + for latex/1407 + 1420 (from patch file) * ltdefns.dtx: From patch file: make \@check@c \long - (latex/1346) \newenvironment argument handling /1507. + (latex/1346) \newenvironment argument handling /1507. * ifthen.dtx: Fix `driver' docstrip guard. Reported by - Martin Schr"oder. + Martin Schr"oder. 1995-04-24 David Carlisle * ltpage.dtx: Reset \emergencystretch in \fussy latex /1344 - (fom patch file). Clean up documentation slightly. + (fom patch file). Clean up documentation slightly. * ltcntrl.dtx: fix for /1317 (internal) \@for expanding its argument incorectly @@ -8016,18 +8138,18 @@ All changes above are only part of the development branch for the next release. * ltbibl.dtx: Add \mbox to \cite for latex/1239 from patch file. Make \@onlypreamble\bibcite /1388 (from patch file) - Add some macro envs to documentation. + Add some macro envs to documentation. * ltoutput.dtx: Modify docstrip guards to keep trace code out of the kernel, unless `trace' specified. - 2 more fixes from patch file - latex/1451: newline command \\ in eqnarray and output routine - %%% latex/1392: AtBeginDvi broken + 2 more fixes from patch file + latex/1451: newline command \\ in eqnarray and output routine + %%% latex/1392: AtBeginDvi broken * latex209.dtx: Add \proclaim and \ttraggedright * ltplain.dtx: Make \new... non outer: /1405 (from patch file) - Move \proclaim and \ttragedright to latex209.dtx + Move \proclaim and \ttragedright to latex209.dtx 1995-04-23 Frank Mittelbach @@ -8041,9 +8163,9 @@ All changes above are only part of the development branch for the next release. * inputenc.dtx (section{The ISO Latin-1 encoding}): \textonequarter and friends incorrectly declared as math chars. (section{Default definitions for characters}): - Default values moved to own section. + Default values moved to own section. (section{The ISO Latin-2 encoding}): - latin2 added. pr/1447. + latin2 added. pr/1447. (section{The IBM code page 850}): cp850 added. pr/1330. @@ -8069,10 +8191,10 @@ All changes above are only part of the development branch for the next release. * Makefile (cleanupsrc): set date to June 1995 * ltclass.dtx: Fix filecontents and \DeclareOption - pr's 1487 and 1498 . (moved from patch file.) + pr's 1487 and 1498 . (moved from patch file.) * ltfinal.dtx: Modify to allow ltpatch.ltx (patch level 0) - For a full release. To solve problems of initial install picking + For a full release. To solve problems of initial install picking up old patch files. 1995-04-19 Frank Mittelbach @@ -8123,7 +8245,7 @@ All changes above are only part of the development branch for the next release. * latex209.dtx: Fixes for latex/1460 (infinite looping on 2nd \documentstyle command) and latex/1424 (\newcommand{\r}{}) - Also wrap some long lines to 72. + Also wrap some long lines to 72. 1995-03-20 David Carlisle @@ -8142,7 +8264,7 @@ All changes above are only part of the development branch for the next release. 1995-03-17 David Carlisle * latexbug.el (report-latex-bug): Support transient mark mode - Also use shell-command so that shell variables are initialised. + Also use shell-command so that shell variables are initialised. 1995-03-14 Johannes Braams @@ -8176,8 +8298,8 @@ All changes above are only part of the development branch for the next release. 1994-12-17 Alan Jeffrey - * ltnews02.tex: Edited description of AMS-LaTeX to get everything - to fit onto one page. + * ltnews02.tex: Edited description of AMS-LaTeX to get everything + to fit onto one page. 1994-12-16 Johannes Braams @@ -8191,21 +8313,21 @@ All changes above are only part of the development branch for the next release. 1994-12-15 David Carlisle * latexbug.el: (Matt Swift) Support old emacs (tested with 18.57 - in addition to 19.28) + in addition to 19.28) 1994-12-14 Chris Rowley - * ltoutenc.dtx + * ltoutenc.dtx - Corrected typo + Corrected typo - * usrguide.tex + * usrguide.tex - Removed some commands + Removed some commands - * cfgguide.tex + * cfgguide.tex - Tidying + Tidying 1994-12-14 David Carlisle @@ -8213,14 +8335,14 @@ All changes above are only part of the development branch for the next release. 1994-12-14 Alan Jeffrey - * ltoutenc.dtx: Added braces to \copyright so it works unbraced in - subscripts. - Added \ifmmode check to \@changed@cmd so that redefinitions aren't - made in math mode (which can also foul up unbraced subscripts). - Commented out \textasciicircum, - \textasciitilde, \textbackslash, \textbar, - \textgreater, \texthyphenchar, \texthyphen and - \textless to save memory. + * ltoutenc.dtx: Added braces to \copyright so it works unbraced in + subscripts. + Added \ifmmode check to \@changed@cmd so that redefinitions aren't + made in math mode (which can also foul up unbraced subscripts). + Commented out \textasciicircum, + \textasciitilde, \textbackslash, \textbar, + \textgreater, \texthyphenchar, \texthyphen and + \textless to save memory. 1994-12-13 David Carlisle @@ -8248,7 +8370,7 @@ All changes above are only part of the development branch for the next release. 1994-12-12 David Carlisle * latexbug.el: Add missing (defvar ltxbug-mail-headers - (Matt Swift: latex/1255) + (Matt Swift: latex/1255) * ltxguide.cls: Stop \small in verbatim affecting previous para. @@ -8258,15 +8380,15 @@ All changes above are only part of the development branch for the next release. 1994-12-12 Alan Jeffrey - * ltoutenc.dtx: Tidied up documentation. + * ltoutenc.dtx: Tidied up documentation. 1994-12-11 Chris Rowley - * ltfloat.dtx + * ltfloat.dtx - * cfgguide.tex + * cfgguide.tex - Major editing + Major editing 1994-12-11 Johannes Braams @@ -8293,13 +8415,13 @@ All changes above are only part of the development branch for the next release. 1994-12-10 Alan Jeffrey - * inputenc.dtx: Removed useless catcode setting of ~. - Made letters active and undefined by default, rather than illegal. - Added `beta test' message. + * inputenc.dtx: Removed useless catcode setting of ~. + Made letters active and undefined by default, rather than illegal. + Added `beta test' message. - * ltoutenc.dtx: Added documentation for the OML encoding, after - the last lot got lost by the server... - Replaced width with \@width in vrules. + * ltoutenc.dtx: Added documentation for the OML encoding, after + the last lot got lost by the server... + Replaced width with \@width in vrules. 1994-12-09 Johannes Braams @@ -8319,22 +8441,22 @@ All changes above are only part of the development branch for the next release. * usrguide.tex: \arraynewline RIP. * lttab.dtx: Make \tabularnewline work in array. - \arraynewline deleted. + \arraynewline deleted. * latexbug.el: mention public database. * latexbug.tex: Call category 0 LaTeX not base - Add >Confidential no field to all messages by default. - Add message about public database to final typeout. - Compress messages to fit on 25-line screen. + Add >Confidential no field to all messages by default. + Add message about public database to final typeout. + Compress messages to fit on 25-line screen. * usrguide.tex: mention list of packages in LaTeXBook. 1994-12-08 Alan Jeffrey - * bugs.txt: Added pointer to ltxbugs2html. + * bugs.txt: Added pointer to ltxbugs2html. - * ltoutenc.dtx: Added \null and \sh@ft to \b and \d. + * ltoutenc.dtx: Added \null and \sh@ft to \b and \d. 1994-12-07 Johannes Braams @@ -8343,15 +8465,15 @@ All changes above are only part of the development branch for the next release. 1994-12-07 David Carlisle * usrguide.tex: Document ltx3pub papers on ctan. - Other small corrections. + Other small corrections. 1994-12-07 Alan Jeffrey - * tlb1042.lvt: Rewrote test file to avoid printing out internal - details of how \ENC-cmd is implemented. + * tlb1042.lvt: Rewrote test file to avoid printing out internal + details of how \ENC-cmd is implemented. - * tlb0552.lvt: Rewrote test file to do a showbox on $\_$ rather - than a \tracingall. + * tlb0552.lvt: Rewrote test file to do a showbox on $\_$ rather + than a \tracingall. 1994-12-06 David Carlisle @@ -8369,37 +8491,37 @@ All changes above are only part of the development branch for the next release. (subsection{Macros for loading fonts}): set \nfss@catcodes locally to \relax in \try@load@fontshape so that it isn't executed several times when an .fd file is - read in. + read in. * updated various test files. 1994-12-05 David Carlisle * latexbug.tex: Add \pause so messages do not scroll off screen. - Suggested by Rosemary Bailey. + Suggested by Rosemary Bailey. * lablst.tex: Print labels verbatim, and input packages. - Fixing problems reported via c.t.t. + Fixing problems reported via c.t.t. 1994-12-05 Alan Jeffrey - * ltoutenc.dtx: Added braces round the \ooalign in \textcircled. + * ltoutenc.dtx: Added braces round the \ooalign in \textcircled. - * tlb1233.lvt: Added test file for unbraced \ooalign's. + * tlb1233.lvt: Added test file for unbraced \ooalign's. 1994-12-02 Alan Jeffrey - * fontdef.dtx: Commented out \ldots. + * fontdef.dtx: Commented out \ldots. - * lfonts.dtx: Commented out \copyright. + * lfonts.dtx: Commented out \copyright. - * tlb1214.lvt: Test file for symbols like \pounds. + * tlb1214.lvt: Test file for symbols like \pounds. - * tlb1217.lvt: Test file for \a. + * tlb1217.lvt: Test file for \a. - * ltoutenc.dtx: Fixed a bug with \a. + * ltoutenc.dtx: Fixed a bug with \a. - * cmfonts.fdd: Added font substitutions for \pounds. + * cmfonts.fdd: Added font substitutions for \pounds. 1994-12-01 Johannes Braams @@ -8424,7 +8546,7 @@ All changes above are only part of the development branch for the next release. * lthyphen.dtx: lthyphen.ltx|cfg now hyphen.ltx|cfg * texpert.txt: Document ltxcheck font checks. - lthyphen.cfg now (or soon will be) hyphen.cfg + lthyphen.cfg now (or soon will be) hyphen.cfg * ltplain.dtx: remove some {oldcomments} and other tidying up. @@ -8440,7 +8562,7 @@ All changes above are only part of the development branch for the next release. * ltfiles.dtx: Use new \@dofilelist. * ltmiscen.dtx: Add new \@dofilelist to \enddocument - Move some of the warnings in \enddocument out of \if@filesw. + Move some of the warnings in \enddocument out of \if@filesw. * Makefile (TEXTS): add latexbug.el @@ -8448,11 +8570,11 @@ All changes above are only part of the development branch for the next release. 1994-11-30 Alan Jeffrey - * fam.dtx: Set \FOO-cmd to \@current@cmd rather than \relax when - entering encoding FOO. + * fam.dtx: Set \FOO-cmd to \@current@cmd rather than \relax when + entering encoding FOO. - * ltoutenc.dtx: Made text commands expand (almost) entirely in the - mouth. + * ltoutenc.dtx: Made text commands expand (almost) entirely in the + mouth. 1994-11-28 David Carlisle @@ -8460,30 +8582,30 @@ All changes above are only part of the development branch for the next release. 1994-11-28 Alan Jeffrey - * ltdefns.dtx: Corrected \changes entries. + * ltdefns.dtx: Corrected \changes entries. - * ltfiles.dtx: Corrected \changes entries. + * ltfiles.dtx: Corrected \changes entries. - * lterror.dtx: Corrected \changes entries. + * lterror.dtx: Corrected \changes entries. - * ltxref.dtx: Corrected \changes entries. + * ltxref.dtx: Corrected \changes entries. - * ltsect.dtx: Corrected \changes entries. + * ltsect.dtx: Corrected \changes entries. - * ltidxglo.dtx: Corrected \changes entries. + * ltidxglo.dtx: Corrected \changes entries. - * lttab.dtx: Corrected \changes entries (wrong format). + * lttab.dtx: Corrected \changes entries (wrong format). - * ltoutenc.dtx: Added new definitions of \b, \c and \d. - Fixed bug with accents on commands which aren't allowed in - \csname. + * ltoutenc.dtx: Added new definitions of \b, \c and \d. + Fixed bug with accents on commands which aren't allowed in + \csname. - * inputenc.dtx: Moved a docstrip option to it's correct home. + * inputenc.dtx: Moved a docstrip option to it's correct home. - * latex209.dtx: Added hacks for space around floats. + * latex209.dtx: Added hacks for space around floats. - * tlb1184.lvt: Added check file for default accent and symbol - definitions. + * tlb1184.lvt: Added check file for default accent and symbol + definitions. 1994-11-25 David Carlisle @@ -8496,8 +8618,8 @@ All changes above are only part of the development branch for the next release. * unpack2e.dst: Correct the preamble written to generated files. * ltdefns.dtx: modify \newenvironment so that a graf environment - is not allowed (Piet van Oostrum latex/1037). Previous attemt - to do this removed... + is not allowed (Piet van Oostrum latex/1037). Previous attemt + to do this removed... 1994-11-23 David Carlisle @@ -8516,68 +8638,68 @@ All changes above are only part of the development branch for the next release. * latint.dtx: wrap long lines. * source2e.tex: Make frontmatter \pagenumbering{roman} - So can be processed with only 2 latex runs. (Ulrik Vieth) - Add lthyphen.dtx. + So can be processed with only 2 latex runs. (Ulrik Vieth) + Add lthyphen.dtx. 1994-11-22 Alan Jeffrey - * tlb0574.lvt: Added check file for empyt accents and accents in - tocs. + * tlb0574.lvt: Added check file for empyt accents and accents in + tocs. - * ltoutenc.dtx: Fixed `empty accent' bug. + * ltoutenc.dtx: Fixed `empty accent' bug. - * inputenc.dtx: Fixed typo A1 -> A0. + * inputenc.dtx: Fixed typo A1 -> A0. 1994-11-21 Alan Jeffrey - * ltoutenc.dtx: Fixed \dots so that it has no extra space in a - monowidth font. - Corrected typo in the definition of \mathunderscore. + * ltoutenc.dtx: Fixed \dots so that it has no extra space in a + monowidth font. + Corrected typo in the definition of \mathunderscore. - * inputenc.dtx: Added \textregistered. - Added "A0 (nbs) to Latin-1. + * inputenc.dtx: Added \textregistered. + Added "A0 (nbs) to Latin-1. 1994-11-20 Chris Rowley - * ltfloat.dtx + * ltfloat.dtx - * ltoutput.dtx + * ltoutput.dtx - * ltxguide.cls + * ltxguide.cls - Tidied formatting + Tidied formatting - * patches.txt + * patches.txt - Updated + Updated - * bugs.txt + * bugs.txt - Updated + Updated - * install.txt + * install.txt - Updated + Updated - * template.txt + * template.txt - Updated + Updated - * texpert.txt + * texpert.txt - Updated + Updated - * usrguide.tex + * usrguide.tex - Major update + Major update - * clsguide.tex + * clsguide.tex - Major update + Major update - * fntguide.tex + * fntguide.tex - Major update + Major update 1994-11-18 David Carlisle @@ -8590,12 +8712,12 @@ All changes above are only part of the development branch for the next release. * fam.dtx: \next renamed to \reserved@f * latint.dtx: use \expandafter instead of \next in - \DeclareMathDelimiter. + \DeclareMathDelimiter. * ltplain.dtx: Remove \pt, now defined elsewhere. * ltmath.dtx Use \expandafter trick instead of \next - in a' \phantom and \smash. Colour support to \phantom and \smash + in a' \phantom and \smash. Colour support to \phantom and \smash 1994-11-17 David Carlisle @@ -8645,9 +8767,9 @@ All changes above are only part of the development branch for the next release. 1994-11-16 Chris Rowley - * latex209.dtx + * latex209.dtx - Restored 2e logo + Restored 2e logo 1994-11-16 David Carlisle @@ -8656,7 +8778,7 @@ All changes above are only part of the development branch for the next release. 1994-11-15 David Carlisle * ifthen.dtx: Use \@unexpandable@protect and modify - \@setref to fix bug /946 (/1023) \pageref breaking tests. + \@setref to fix bug /946 (/1023) \pageref breaking tests. 1994-11-14 David Carlisle @@ -8666,21 +8788,21 @@ All changes above are only part of the development branch for the next release. 1994-11-12 Chris Rowley - * ltmiscen.dtx + * ltmiscen.dtx - Tidied \endtrivlists + Tidied \endtrivlists - * ltspace.dtx + * ltspace.dtx - Attempted to improve error messages + Attempted to improve error messages - * ltfntcmd.dtx + * ltfntcmd.dtx - Added line-break to error message + Added line-break to error message - * lablst.tex + * lablst.tex - Simpler with better layout + Simpler with better layout 1994-11-12 David Carlisle @@ -8692,11 +8814,11 @@ All changes above are only part of the development branch for the next release. 1994-11-10 Chris Rowley - * ltbibl.dtx + * ltbibl.dtx - Patched \nocite{*} + Patched \nocite{*} - * ltplain.dtx + * ltplain.dtx 1994-11-10 Johannes Braams @@ -8731,7 +8853,7 @@ All changes above are only part of the development branch for the next release. * fontdef.dtx: Add \DeclareMathSizes (from setsize.dtx). * Makefile: Generate new release date 1994/12/01 - Remove setfile.dtx from generation of ltfss.dtx + Remove setfile.dtx from generation of ltfss.dtx * ltpatch.ltx: Change to patch 1994/12/01 release. @@ -8788,81 +8910,81 @@ All changes above are only part of the development branch for the next release. Fix bug that produced extra "No math setup" message if tracefont was loaded with default options. - Patched \loop + Patched \loop 1994-11-05 Chris Rowley - * ltfloat.dtx (subsection{Floating Environments}): + * ltfloat.dtx (subsection{Floating Environments}): - Introduced \color@hbox - Changed colour resetting for footnotes (again) - Introduced a simulacrum of compatibility to old \@xfloat - Changed float setup + Introduced \color@hbox + Changed colour resetting for footnotes (again) + Introduced a simulacrum of compatibility to old \@xfloat + Changed float setup - * ltboxes.dtx (section{\LaTeX\ Box commands}): + * ltboxes.dtx (section{\LaTeX\ Box commands}): - Introduced \color@hbox - Changed colour resetting for minipage footnotes - Added to documentation + Introduced \color@hbox + Changed colour resetting for minipage footnotes + Added to documentation - * ltoutput.dtx (subsection{Floats}): + * ltoutput.dtx (subsection{Floats}): - Introduced \color@hbox - New style protect settings in shipout - Tidied shipout and added to documentation - Added begindvi stuff + Introduced \color@hbox + New style protect settings in shipout + Tidied shipout and added to documentation + Added begindvi stuff 1994-11-05 Alan Jeffrey - * ltoutenc.dtx: Added setting of \@typeset@protect to \patterns - and \hyphenation. + * ltoutenc.dtx: Added setting of \@typeset@protect to \patterns + and \hyphenation. - * ltnews02.tex: First draft. + * ltnews02.tex: First draft. 1994-11-04 Alan Jeffrey - * ltfloat.dtx: Added \protected@xdef to \footnote, \@footnotetext, - and \footnotemark. + * ltfloat.dtx: Added \protected@xdef to \footnote, \@footnotetext, + and \footnotemark. - * ltoutenc.dtx: Added \_. + * ltoutenc.dtx: Added \_. - * ltpage.dtx: Added \@unexpandable@protect to \markboth and - \markright. + * ltpage.dtx: Added \@unexpandable@protect to \markboth and + \markright. - * lttab.dtx: Added \set@typeset@protect to \@array and - \multicolumn. - Added \@unexpandable@protect to \@mkpream. + * lttab.dtx: Added \set@typeset@protect to \@array and + \multicolumn. + Added \@unexpandable@protect to \@mkpream. - * ltboxes.dtx: Added \protected@edef to \@mpfootnotetext. + * ltboxes.dtx: Added \protected@edef to \@mpfootnotetext. - * ltidxglo.dtx: Added \protected@write to \index and \glossary. - Removed \if@filesw from \makeindex and \makeglossary. + * ltidxglo.dtx: Added \protected@write to \index and \glossary. + Removed \if@filesw from \makeindex and \makeglossary. - * ltsect.dtx: Added \protected@write to \addtocontents and - \addcontentsline. - Added \protected@edef to \@sect. - Added \protected@xdef to \thanks. + * ltsect.dtx: Added \protected@write to \addtocontents and + \addcontentsline. + Added \protected@edef to \@sect. + Added \protected@xdef to \thanks. - * ltxref.dtx: Added \protected@write to \label. - Added \protected@edef to \refstepcounter. + * ltxref.dtx: Added \protected@write to \label. + Added \protected@edef to \refstepcounter. - * ltmiscen.dtx: Removed setting of \protect from \@writefile. + * ltmiscen.dtx: Removed setting of \protect from \@writefile. - * lterror.dtx: Added \set@display@protect to messages. + * lterror.dtx: Added \set@display@protect to messages. - * ltfiles.dtx: Added \protected@write and a new definition of - \nofiles. + * ltfiles.dtx: Added \protected@write and a new definition of + \nofiles. - * ltdefns.dtx: Added \x@protect and a new mechanism for protecting - short commands. - Added commands for safely performing edefs. - Added \set@display@protect to \typeout + * ltdefns.dtx: Added \x@protect and a new mechanism for protecting + short commands. + Added commands for safely performing edefs. + Added \set@display@protect to \typeout 1994-11-03 David Carlisle * ltdirchk.dtx: Check that latex.ltx is used with an initex with - no format preloaded. (VMS initex defaults to loading - plain.fmt) + no format preloaded. (VMS initex defaults to loading + plain.fmt) * ltdefns.dtx: rename \long@def to \l@ngrel@x @@ -8878,7 +9000,7 @@ All changes above are only part of the development branch for the next release. 1994-11-02 Alan Jeffrey - * ltoutenc.dtx: Wrapped long lines. + * ltoutenc.dtx: Wrapped long lines. 1994-10-31 David Carlisle @@ -8886,63 +9008,63 @@ All changes above are only part of the development branch for the next release. 1994-10-31 Alan Jeffrey - * Makefile: Added inputenc.dst and ltoutenc.dst, and inputenc.dtx. + * Makefile: Added inputenc.dst and ltoutenc.dst, and inputenc.dtx. - * fontdef.dtx: Added OMLenc.def. + * fontdef.dtx: Added OMLenc.def. - * unpack2e.ins: Added inputenc.ins. + * unpack2e.ins: Added inputenc.ins. - * unpacked.txt: Added inputenc.sty, font encoding and input - encoding files. + * unpacked.txt: Added inputenc.sty, font encoding and input + encoding files. - * fntguide.tex: Added documentation on the new text declaration - commands. + * fntguide.tex: Added documentation on the new text declaration + commands. - * usrguide.tex: Added documentation on the new text commands. + * usrguide.tex: Added documentation on the new text commands. 1994-10-30 Chris Rowley - * ltfloat.dtx (subsection{Floating Environments}): + * ltfloat.dtx (subsection{Floating Environments}): - In float handling: - major changes to parameter parsing, setting of local - variables, etc; - two-column and one-column cases merged; space hacks moved; - colour support improved and corrected, including extra boxes. - In marginpars: - colour support improved and corrected, including extra boxes. - In footnotes: - colour support improved. + In float handling: + major changes to parameter parsing, setting of local + variables, etc; + two-column and one-column cases merged; space hacks moved; + colour support improved and corrected, including extra boxes. + In marginpars: + colour support improved and corrected, including extra boxes. + In footnotes: + colour support improved. - * ltoutput.dtx (subsection{Floats}): + * ltoutput.dtx (subsection{Floats}): - Small changes to documentation - Added colour support to \@topnewpage - Added colour support for footnotes to \@makecol - Added warning to \@fpsadddefault + Small changes to documentation + Added colour support to \@topnewpage + Added colour support for footnotes to \@makecol + Added warning to \@fpsadddefault - * ltdefns.dtx (subsection{Internal defining commands}): + * ltdefns.dtx (subsection{Internal defining commands}): - Added \@onelevel@sanitize + Added \@onelevel@sanitize 1994-10-30 Alan Jeffrey - * cmfonts.dst: Added OMScmnr and OMLcmr. + * cmfonts.dst: Added OMScmnr and OMLcmr. - * cmfonts.fdd: Added OMScmr and OMLcmr. + * cmfonts.fdd: Added OMScmr and OMLcmr. - * ltxguide.cls: Added \NEWdescription, \NEWfeature and the - optional argument to desc. + * ltxguide.cls: Added \NEWdescription, \NEWfeature and the + optional argument to desc. - * ltoutenc.dst: Added OMLenc.def. + * ltoutenc.dst: Added OMLenc.def. - * ltoutenc.dtx: added encoding-specific commands from ltmath. - Added OML encoding. - Added \textcircled and removed \textregistered. - Added \DeclareTextCompositeCommand. - Added \t. + * ltoutenc.dtx: added encoding-specific commands from ltmath. + Added OML encoding. + Added \textcircled and removed \textregistered. + Added \DeclareTextCompositeCommand. + Added \t. - * ltmath.dtx: Removed encoding-specific commands to ltoutenc. + * ltmath.dtx: Removed encoding-specific commands to ltoutenc. 1994-10-29 Johannes Braams @@ -8964,17 +9086,17 @@ All changes above are only part of the development branch for the next release. 1994-10-29 Alan Jeffrey - * fontsmpl.dtx: Added tests for \copyright, \dots and - \textregistered. + * fontsmpl.dtx: Added tests for \copyright, \dots and + \textregistered. - * ltmath.dtx: Added \mathellipsis, \mathparagraph, etc. - Removed all of the oldcomments and generally tidied up. - Added \DeclareMathOperator. + * ltmath.dtx: Added \mathellipsis, \mathparagraph, etc. + Removed all of the oldcomments and generally tidied up. + Added \DeclareMathOperator. - * ltoutenc.dtx: Added copyright and textregistered. - Renamed the text versions of \P, \S, etc. to \textparagraph, - \textsection, etc. - Added the definitions of \dots etc. which work in math and text. + * ltoutenc.dtx: Added copyright and textregistered. + Renamed the text versions of \P, \S, etc. to \textparagraph, + \textsection, etc. + Added the definitions of \dots etc. which work in math and text. 1994-10-28 Frank Mittelbach @@ -8983,17 +9105,17 @@ All changes above are only part of the development branch for the next release. 1994-10-28 Alan Jeffrey - * unpack2e.ins: Added OMSenc.def. + * unpack2e.ins: Added OMSenc.def. - * fontsmpl.dtx: Added the text commands defined in ltoutenc.dtx. + * fontsmpl.dtx: Added the text commands defined in ltoutenc.dtx. - * asajtest.ins: An installation file for asajtest.dtx. + * asajtest.ins: An installation file for asajtest.dtx. - * asajtest.tex: A test file for ltoutenc.dtx. This should become - part of the test suite eventually. + * asajtest.tex: A test file for ltoutenc.dtx. This should become + part of the test suite eventually. - * asajtest.dtx: This is a scratch version of ltoutenc.dtx. - Rewrote the enc.def files to use the new default settings. + * asajtest.dtx: This is a scratch version of ltoutenc.dtx. + Rewrote the enc.def files to use the new default settings. 1994-10-27 David Carlisle @@ -9001,11 +9123,11 @@ All changes above are only part of the development branch for the next release. 1994-10-27 Alan Jeffrey - * ltoutenc.dtx: Removed loading of enc.def files. + * ltoutenc.dtx: Removed loading of enc.def files. - * fontdef.dtx: Added OMSenc.def. + * fontdef.dtx: Added OMSenc.def. - * ltoutenc.dst: Added OMSenc.def. + * ltoutenc.dst: Added OMSenc.def. 1994-10-26 David Carlisle @@ -9014,22 +9136,22 @@ All changes above are only part of the development branch for the next release. 1994-10-25 David Carlisle * ltdefns.dtx: Add documentation of star form of \newcommand. - Remove all `oldcomments' environments. - Add lots of `macro' environments. + Remove all `oldcomments' environments. + Add lots of `macro' environments. * ltboxes.dtx: missing % in \@isavepicbox (was in ltpatch.ltx) 1994-10-25 Alan Jeffrey - * ltoutenc.dtx: Added default encodings. - Added \ProvideTextCommand and \ProvideTextCommandDefault. - Added the OMS encoding. + * ltoutenc.dtx: Added default encodings. + Added \ProvideTextCommand and \ProvideTextCommandDefault. + Added the OMS encoding. 1994-10-24 Chris Rowley * ltmath.dtx: - Removed a TAB + Removed a TAB 1994-10-24 David Carlisle @@ -9040,8 +9162,8 @@ All changes above are only part of the development branch for the next release. * ltmath.dtx: - Added \normalcolor to \@eqnnum - Removed braces from \ensuremath + Added \normalcolor to \@eqnnum + Removed braces from \ensuremath 1994-10-20 David Carlisle @@ -9054,11 +9176,11 @@ All changes above are only part of the development branch for the next release. 1994-10-20 Alan Jeffrey - * inputenc.dtx: Split characters into text-only and math-only. - Reded some of the \providecommand's in latin1.def. + * inputenc.dtx: Split characters into text-only and math-only. + Reded some of the \providecommand's in latin1.def. - * latex209.dtx: Corrected a typo---\mark{}{} should have been - \mark{{}{}}. + * latex209.dtx: Corrected a typo---\mark{}{} should have been + \mark{{}{}}. 1994-10-19 Frank Mittelbach @@ -9069,8 +9191,8 @@ All changes above are only part of the development branch for the next release. 1994-10-18 David Carlisle * ltdefns.dtx: Add *-forms to define non-long variants of - commands. - Add extra check so \newenvironment{graf} generates an error. + commands. + Add extra check so \newenvironment{graf} generates an error. * ltfiles.dtx: move \listfiles and \@addtofilelist here. @@ -9078,29 +9200,29 @@ All changes above are only part of the development branch for the next release. 1994-10-17 Alan Jeffrey - * latex209.dtx: Added empty initial mark. - New method of switching off 2e commands. - Allow \newcommand on 2e commands. + * latex209.dtx: Added empty initial mark. + New method of switching off 2e commands. + Allow \newcommand on 2e commands. 1994-10-16 Chris Rowley * ltsect.dtx: - Added \normalcolor to page-numbers in toc + Added \normalcolor to page-numbers in toc * ltfntcmd.dtx: - Tidying, and typos fixed in documentation - Added check for empty text - Removed space from \nfss@text - Renamed \check@nocorr to \text@command: - to improve error messages + Tidying, and typos fixed in documentation + Added check for empty text + Removed space from \nfss@text + Renamed \check@nocorr to \text@command: + to improve error messages * ltboxes.dtx (section{\LaTeX\ Box commands}): Added \long to \fbox, \mbox, \sbox (from ltpatch) \leavevmode corrected for frame boxes (from ltpatch) - \@parboxto macro added to \@iiiparbox, + \@parboxto macro added to \@iiiparbox, to remove misuse of \@empty 1994-10-16 David Carlisle @@ -9130,7 +9252,7 @@ All changes above are only part of the development branch for the next release. 1994-10-14 David Carlisle * latexbug.tex: Add latexbug.cfg system, so that personal - details do not need to be entered every time. + details do not need to be entered every time. 1994-10-14 Frank Mittelbach @@ -9173,16 +9295,16 @@ All changes above are only part of the development branch for the next release. 1994-10-11 David Carlisle * ltdirchk.dtx: Redo ltxcheck: more friendly messages, check - for TeX3.14, and missing fonts. - Add automatic detection of TeX3.14 (previously in ltpatch.ltx) + for TeX3.14, and missing fonts. + Add automatic detection of TeX3.14 (previously in ltpatch.ltx) * latexbug.tex: Modify to prompt for synopsis information. 1994-10-07 Alan Jeffrey - * pastex.txt: Installation guide for PasTeX on the Amiga. + * pastex.txt: Installation guide for PasTeX on the Amiga. - * ltoutenc.dtx: Moved ogonek accent. + * ltoutenc.dtx: Moved ogonek accent. 1994-09-26 Frank Mittelbach @@ -9212,10 +9334,10 @@ All changes above are only part of the development branch for the next release. 1994-09-23 Alan Jeffrey - * latex209.dtx: Added spaces to \@halfmag and friends. + * latex209.dtx: Added spaces to \@halfmag and friends. - * ltxguide.cls: Replaced \PassOptionsToPackage{article} by - \PassOptionsToClass{article}. + * ltxguide.cls: Replaced \PassOptionsToPackage{article} by + \PassOptionsToClass{article}. 1994-09-21 David Carlisle @@ -9237,17 +9359,17 @@ All changes above are only part of the development branch for the next release. 1994-09-04 Alan Jeffrey - * inputenc.dtx: Added \cs{DeclareInputComposite} and the - \cs{ProvidesCommand}s to the encoding files. - Removed the definition of the accent slots in Latin-1. + * inputenc.dtx: Added \cs{DeclareInputComposite} and the + \cs{ProvidesCommand}s to the encoding files. + Removed the definition of the accent slots in Latin-1. 1994-08-31 Alan Jeffrey - * oztex.txt: Checked in revised version from Andrew. + * oztex.txt: Checked in revised version from Andrew. 1994-08-30 Alan Jeffrey - * yandytex.txt: Checked in revised version from Berthold. + * yandytex.txt: Checked in revised version from Berthold. 1994-08-26 Johannes Braams @@ -9261,8 +9383,8 @@ All changes above are only part of the development branch for the next release. 1994-08-24 Alan Jeffrey - * tlb0143.lvt, tlb0162.lvt, tlb0380.lvt, tlb0498.lvt, tlb0642.lvt, - tlb0830.lvt: Checked in. + * tlb0143.lvt, tlb0162.lvt, tlb0380.lvt, tlb0498.lvt, tlb0642.lvt, + tlb0830.lvt: Checked in. 1994-08-09 David Carlisle @@ -9280,11 +9402,11 @@ All changes above are only part of the development branch for the next release. 1994-07-27 Alan Jeffrey - * ltnews.cls: Replaced \PassOptionToClass by \PassOptionsToClass. + * ltnews.cls: Replaced \PassOptionToClass by \PassOptionsToClass. 1994-07-25 Alan Jeffrey - * microtex.txt: Removed extraneous \dump. + * microtex.txt: Removed extraneous \dump. 1994-07-18 David Carlisle @@ -9293,13 +9415,13 @@ All changes above are only part of the development branch for the next release. 1994-07-18 Alan Jeffrey - * microtex.txt: Added installation guide for MicroTeX. + * microtex.txt: Added installation guide for MicroTeX. 1994-07-14 Alan Jeffrey - * inputenc.dtx: Replaced \Dh by \DH and \Th by \TH. - Added \ensuremath to the math commands. - Added \inputencoding. + * inputenc.dtx: Replaced \Dh by \DH and \Th by \TH. + Added \ensuremath to the math commands. + Added \inputencoding. 1994-07-13 Johannes Braams @@ -9331,7 +9453,7 @@ All changes above are only part of the development branch for the next release. 1994-07-13 Alan Jeffrey - * fontsmpl.dtx: Added an \upshape. + * fontsmpl.dtx: Added an \upshape. 1994-07-11 Johannes Braams @@ -9364,9 +9486,9 @@ All changes above are only part of the development branch for the next release. * ltpatch.ltx: Added patches for: - \mathit in text mode - \loop could do one iteration too much in certain situations - T1 breaks german 2.4a (this is a german.sty problem actually) + \mathit in text mode + \loop could do one iteration too much in certain situations + T1 breaks german 2.4a (this is a german.sty problem actually) * patches.txt: Added descritions of further patch level 3 patches. @@ -9374,33 +9496,33 @@ All changes above are only part of the development branch for the next release. 1994-06-30 Chris Rowley - * fntguide.tex + * fntguide.tex Warning about enc.def commands added Stuff on font definition files and encoding definition files changed - removed, for consistency, use throughout - Small edits + removed, for consistency, use throughout + Small edits - * clsguide.tex + * clsguide.tex Michael's amendments added 1994-06-26 Chris Rowley - * usrguide.tex + * usrguide.tex Minor edits - * clsguide.tex + * clsguide.tex Added stuff Changed usage of <> Reordered update stuff Added Summary sheet - Removed draft status + Removed draft status - * ltxguide.cls + * ltxguide.cls 1994-06-23 Johannes Braams @@ -9423,7 +9545,7 @@ All changes above are only part of the development branch for the next release. \test..{} problem Changed usage of <> - Changed definition of verbatim + Changed definition of verbatim 1994-06-22 Chris Rowley @@ -9432,17 +9554,17 @@ All changes above are only part of the development branch for the next release. Removed space from \DeclareTextCommand Improved error messages from \DeclareTextCommand - * usrguide.tex + * usrguide.tex Changed usage of <> - * clsguide.tex + * clsguide.tex Added stuff Changed usage of <> Rationalised encoding stuff - * fntguide.tex + * fntguide.tex Rationalised usage of cdp, ENC, encoding Changed usage of <> @@ -9460,18 +9582,18 @@ All changes above are only part of the development branch for the next release. * usrguide.tex - Added stuff on project, money etc. + Added stuff on project, money etc. * fntguide.tex - Corrcted largesymbols stuff. + Corrcted largesymbols stuff. - * clsguide.tex + * clsguide.tex Major revision and additons. - Spell checked. - Removed \typeouts. - Removed overfull boxes. + Spell checked. + Removed \typeouts. + Removed overfull boxes. * ltfntcmd.dtx: @@ -9491,15 +9613,15 @@ All changes above are only part of the development branch for the next release. * template.txt - Changed 2e to new. + Changed 2e to new. * fntguide.tex - Tidying. + Tidying. - * directex.txt + * directex.txt - Corrected layout. + Corrected layout. 1994-06-12 Rainer Schoepf @@ -9507,7 +9629,7 @@ All changes above are only part of the development branch for the next release. distrib/unpacked. * ltpatch.dtx: Don't set catcodes of upper 128 characters in - TeX2. + TeX2. * manifest.txt: Added directex.txt. @@ -9523,42 +9645,42 @@ All changes above are only part of the development branch for the next release. Removed these typeouts: \typeout{CONTENTS OF THE TOOLS BUNDLE: needs checking} \typeout{Marion said: Perhaps the different uses of - `newcommand and `providecommand can be shown a bit clearer} + `newcommand and `providecommand can be shown a bit clearer} \typeout{List of stuff in mfnfss, psnfss, babel not done} * fntguide.tex - Editorial changes. - Removed duplicated text. - Removed unwanted blank lines. + Editorial changes. + Removed duplicated text. + Removed unwanted blank lines. * emtex.txt - Added section on memory problems. + Added section on memory problems. - * directex.txt + * directex.txt - New file added. + New file added. - * install.txt + * install.txt - Added new file to list. + Added new file to list. - * readme.txt + * readme.txt - Editorial changes. - Added patches.txt, etc. + Editorial changes. + Added patches.txt, etc. * patches.txt - Editorial changes. - Removed references to lists. + Editorial changes. + Removed references to lists. Documented lack of lists. * ltfntcmd.dtx - Corrected documentation, title etc. - Corrected dates in changes entries. + Corrected documentation, title etc. + Corrected dates in changes entries. 1994-06-11 Frank Mittelbach @@ -9613,13 +9735,13 @@ All changes above are only part of the development branch for the next release. 1994-06-06 Rainer Schoepf * Makefile.dist: Changed mv to cp, added installation of *.ist - files, added target `clean'. + files, added target `clean'. * manifest.txt: Changed name of distributed Makefile from - Makefile to Makefile.unx. + Makefile to Makefile.unx. * Makefile: Changed name of distributed Makefile from Makefile - to Makefile.unx. + to Makefile.unx. 1994-06-03 Chris Rowley @@ -9688,7 +9810,7 @@ All changes above are only part of the development branch for the next release. 1994-06-01 Alan Jeffrey - * ltnews01.tex: Corrected grammar. + * ltnews01.tex: Corrected grammar. 1994-05-31 Chris Rowley @@ -9718,15 +9840,15 @@ All changes above are only part of the development branch for the next release. 1994-05-31 Alan Jeffrey - * latex209.dtx: Added SLiTeX logo again. + * latex209.dtx: Added SLiTeX logo again. - * ltnews01.tex: Finished off. + * ltnews01.tex: Finished off. - * ltnews.cls: Added downloaded PS fonts options. - Removed angle brackets from <...> since these were the last - remaining bitmaps! - Added variants of the LaTeX logo. - Added the ltnews.cfg file. + * ltnews.cls: Added downloaded PS fonts options. + Removed angle brackets from <...> since these were the last + remaining bitmaps! + Added variants of the LaTeX logo. + Added the ltnews.cfg file. 1994-05-30 Johannes Braams @@ -9746,8 +9868,8 @@ All changes above are only part of the development branch for the next release. eufrak from main distribution to extra package directory.. * manifest.txt: Moved pandora, oldgerm, amsfonts, euscript, - eufrak from main distribution to extra package directory. - Removed features.tex from distribution. + eufrak from main distribution to extra package directory. + Removed features.tex from distribution. 1994-05-30 Frank Mittelbach @@ -9756,21 +9878,21 @@ All changes above are only part of the development branch for the next release. 1994-05-30 Alan Jeffrey - * usrguide.tex: Removed the description of mfnfss and tools - packages. - Removed sections that were commented out. - Removed typeouts. - Wrapped long lines. - Rewrote to remove overfull hboxes. - Moved the stuff on \newmathalphabet to the section on LaTeX - errors. - Rewrote the stuff on latex209.cfg, and replaced - \PassOptionsToClass (which requires you to list all the - known classes) with \ds@oldlfont. - Added the `LaTeX2e command in LaTeX 2.09 document' error. - Added the SLiTeX logo to the list of unsupported commands. - Added the full list of \text..., \...family, \...series, \...shape - and \math... commands. + * usrguide.tex: Removed the description of mfnfss and tools + packages. + Removed sections that were commented out. + Removed typeouts. + Wrapped long lines. + Rewrote to remove overfull hboxes. + Moved the stuff on \newmathalphabet to the section on LaTeX + errors. + Rewrote the stuff on latex209.cfg, and replaced + \PassOptionsToClass (which requires you to list all the + known classes) with \ds@oldlfont. + Added the `LaTeX2e command in LaTeX 2.09 document' error. + Added the SLiTeX logo to the list of unsupported commands. + Added the full list of \text..., \...family, \...series, \...shape + and \math... commands. 1994-05-29 Johannes Braams @@ -9799,40 +9921,40 @@ All changes above are only part of the development branch for the next release. 1994-05-29 Alan Jeffrey - * ltxguide.cls: Added italic correction to <...>. - Added \sourcecode. - - * fntguide.tex: Corrected typos spotted by FMi. - Added the `math selection commands' section. - Replaced the notion of math font attributes with a description - closer to that in the Companion. - Moved stuff on declaring encodings into its own section - Moved stuff on font installation into its own section. - Moved stuff on initialization into its own section. - Moved stuff on naming conventions into its own section. - Moved DeclareFixedFont into text font selection. - Added text to the introduction. - Moved all of the enc.def file commands into one subsection. - Moved everything that's left without a home into the `miscellania' - section. - Generally tidied up. + * ltxguide.cls: Added italic correction to <...>. + Added \sourcecode. + + * fntguide.tex: Corrected typos spotted by FMi. + Added the `math selection commands' section. + Replaced the notion of math font attributes with a description + closer to that in the Companion. + Moved stuff on declaring encodings into its own section + Moved stuff on font installation into its own section. + Moved stuff on initialization into its own section. + Moved stuff on naming conventions into its own section. + Moved DeclareFixedFont into text font selection. + Added text to the introduction. + Moved all of the enc.def file commands into one subsection. + Moved everything that's left without a home into the `miscellania' + section. + Generally tidied up. 1994-05-28 Alan Jeffrey - * ltxguide.cls: Made << and >> produce < and > inside verbatim. - Added ltxguide.cfg. - - * fntguide.tex: Created file out of features.tex. - Redid document structure to fit with usrguide and clsguide. - Removed stuff on old style digits. - Moved text font stuff before math font stuff. - Removed `utilities' section. - Removed the author font commands (covered by usrguide). - Added description of the text font attributes. - Redid the description of the \f@... commands. - Redid the description of the \...default commands. - Added the section on the \DeclareTextWidget commands. - Added the section on math attributes. + * ltxguide.cls: Made << and >> produce < and > inside verbatim. + Added ltxguide.cfg. + + * fntguide.tex: Created file out of features.tex. + Redid document structure to fit with usrguide and clsguide. + Removed stuff on old style digits. + Moved text font stuff before math font stuff. + Removed `utilities' section. + Removed the author font commands (covered by usrguide). + Added description of the text font attributes. + Redid the description of the \f@... commands. + Redid the description of the \...default commands. + Added the section on the \DeclareTextWidget commands. + Added the section on math attributes. 1994-05-27 Johannes Braams @@ -9864,17 +9986,17 @@ All changes above are only part of the development branch for the next release. * tlb0438.tlg: Line number change in exscale package. * Makefile: Renamed unpack2e.ins to unpack.ins and latex2e.ltx - to latex.ltx, renamed format file to latex.fmt. Added test - tlb0483. + to latex.ltx, renamed format file to latex.fmt. Added test + tlb0483. * manifest.txt: Renamed unpack2e.ins to unpack.ins and - latex2e.ltx to latex.ltx, rearranged a few lines. + latex2e.ltx to latex.ltx, rearranged a few lines. * unpack2e.ins: Renamed unpack2e.ins to unpack.ins and - latex2e.ltx to latex.ltx. + latex2e.ltx to latex.ltx. * unpacked.txt: Renamed unpack2e.ins to unpack.ins and - latex2e.ltx to latex.ltx. + latex2e.ltx to latex.ltx. * tracefnt.dtx: Changed copyright line. @@ -9905,15 +10027,15 @@ All changes above are only part of the development branch for the next release. 1994-05-27 Alan Jeffrey - * ltnews01.tex: Corrected filenames of usrguie and clsguide. - Removed ltnews.cls from filecontents. + * ltnews01.tex: Corrected filenames of usrguie and clsguide. + Removed ltnews.cls from filecontents. - * ltnews.cls: Checked this in. Added angle brackets to <...>. - Added AMS and SliTeX logos. + * ltnews.cls: Checked this in. Added angle brackets to <...>. + Added AMS and SliTeX logos. - * latex209.dtx: Added SliTeX logo. + * latex209.dtx: Added SliTeX logo. - * ltxguide.cls: Added SliTeX logo. + * ltxguide.cls: Added SliTeX logo. 1994-05-26 Johannes Braams @@ -9963,7 +10085,7 @@ All changes above are only part of the development branch for the next release. * ltxdoc.dtx: Add silent substitution for bold tt. * ltdirchk.dtx: Fix bug in Mac parser. typo " should have been : - (reported by Andrew Trevorrow) + (reported by Andrew Trevorrow) * ltbibl.dtx: Add initial documentation section. @@ -10072,12 +10194,12 @@ All changes above are only part of the development branch for the next release. * manifest.txt: Added changes.txt. * ltsect.dtx (\@dottedtocline): Put braces around argument 4 - (the actual toc entry) to avoid font (and possibly other) - changes leaking out to the leaders. + (the actual toc entry) to avoid font (and possibly other) + changes leaking out to the leaders. * vlatex01.tlg: Updated for extra lines around warning - messages, removed trailing space in error help messages. - Change in strut for footnotes causes blank line to disappear. + messages, removed trailing space in error help messages. + Change in strut for footnotes causes blank line to disappear. * tnfss7.tlg: Update for new \protect handling, updated for new values of \sfcode and correct \hbar accent. @@ -10110,12 +10232,12 @@ All changes above are only part of the development branch for the next release. 1994-05-25 Alan Jeffrey - * clsguide.tex: Added introduction. - Added section on command naming. - Added section on docstrip. - Added details of option processing. - Added example of DeclareRobustCommand. - Checked the document in with the server. + * clsguide.tex: Added introduction. + Added section on command naming. + Added section on docstrip. + Added details of option processing. + Added example of DeclareRobustCommand. + Checked the document in with the server. 1994-05-24 Chris Rowley @@ -10173,19 +10295,19 @@ All changes above are only part of the development branch for the next release. 1994-05-24 Alan Jeffrey - * ltxguide.tex: Checked in document class. + * ltxguide.tex: Checked in document class. - * clsguide.tex: Added sections on 2e font commands, defining \rm - etc., and obsolete commands. - Added stuff about \normalsize, \textheight and \textwidth being the - only mandatory commands. - Implemented Frank's suggestions for additions to the `loading other - files' section (which is now a subsection of `upgrading'). - Added stuff on why primitive \input is a bad idea. - Added stuff on boxes and colour. - Moved general style stuff to overview section rather than 2.09 - section. - Added newsletter example. + * clsguide.tex: Added sections on 2e font commands, defining \rm + etc., and obsolete commands. + Added stuff about \normalsize, \textheight and \textwidth being the + only mandatory commands. + Implemented Frank's suggestions for additions to the `loading other + files' section (which is now a subsection of `upgrading'). + Added stuff on why primitive \input is a bad idea. + Added stuff on boxes and colour. + Moved general style stuff to overview section rather than 2.09 + section. + Added newsletter example. 1994-05-23 David Carlisle @@ -10323,10 +10445,10 @@ All changes above are only part of the development branch for the next release. 1994-05-23 Alan Jeffrey - * clsguide.tex: Redid document structure to be more like - usrguide. - Added section on class/package structure. - Restructured the commands list. + * clsguide.tex: Redid document structure to be more like + usrguide. + Added section on class/package structure. + Restructured the commands list. 1994-05-22 Frank Mittelbach @@ -10383,27 +10505,27 @@ All changes above are only part of the development branch for the next release. 1994-05-22 Alan Jeffrey - * usrguide.tex: Rewrote description of the new argument to - \newcommand. - Added section on classes and packages, on package options, and on - standard classes and packages. - Added some examples. - Added filecontents* and paragraph on what files can be sent. - Added section on latexsym in `old commands'. - Rewrote some stuff on 2.09 documents. - Added section on \frontmatter, \mainmatter and \backmatter. - Wrote `problems' section, including new error messages, stuff on - \tenrm and friends, old versions of files, and submitting a bug - report. - Added overview. - - * lterror.dtx: Replaced braces with begingroup, to stop mathords - from sneaking into math mode. - Replaced \@generic@message and \@generic@error by \GenericError, - \GenericWarning and \GenericInfo. - Made \GenericError, \GenericWarning and \GenericInfor robust. - Replaced \\ and ~ by \MessageBreak and \space. - Replaced \string by \protect in some messages. + * usrguide.tex: Rewrote description of the new argument to + \newcommand. + Added section on classes and packages, on package options, and on + standard classes and packages. + Added some examples. + Added filecontents* and paragraph on what files can be sent. + Added section on latexsym in `old commands'. + Rewrote some stuff on 2.09 documents. + Added section on \frontmatter, \mainmatter and \backmatter. + Wrote `problems' section, including new error messages, stuff on + \tenrm and friends, old versions of files, and submitting a bug + report. + Added overview. + + * lterror.dtx: Replaced braces with begingroup, to stop mathords + from sneaking into math mode. + Replaced \@generic@message and \@generic@error by \GenericError, + \GenericWarning and \GenericInfo. + Made \GenericError, \GenericWarning and \GenericInfor robust. + Replaced \\ and ~ by \MessageBreak and \space. + Replaced \string by \protect in some messages. 1994-05-21 David Carlisle @@ -10455,20 +10577,20 @@ All changes above are only part of the development branch for the next release. 1994-05-21 Alan Jeffrey - * ltnews01.tex: Wrote 1st draft of LaTeX News #1. + * ltnews01.tex: Wrote 1st draft of LaTeX News #1. - * lterror.dtx: Made \@generic@message robust. + * lterror.dtx: Made \@generic@message robust. 1994-05-20 Rainer Schoepf * vtl2e06.tlg: Update for new \protect handling, change in - format of error messages, change in glue for framed boxes. + format of error messages, change in glue for framed boxes. * vlatex06.tlg: Update for new \protect handling, change in - format of error messages, change in glue for framed boxes. + format of error messages, change in glue for framed boxes. * ltpage.dtx (\marboth, \markright): Changed setting for - \protect. + \protect. * tl2e7.tlg: Update for new \protect handling. @@ -10507,7 +10629,7 @@ All changes above are only part of the development branch for the next release. * ltmiscen.dtx (\@writefile): Added correct setting of \protect. * ltfloat.dtx (\@xfloat): Restore @nobreak switch inside float - to default value false. + to default value false. * ltoutput.dtx (\@outputpage): Added setting of \protect during \shipout. @@ -10549,19 +10671,19 @@ All changes above are only part of the development branch for the next release. 1994-05-20 Alan Jeffrey - * lterror.dtx: Fixed a bug with \@inmatherr. + * lterror.dtx: Fixed a bug with \@inmatherr. - * ltfinal.dtx: Corrected checksum. + * ltfinal.dtx: Corrected checksum. - * lterror.dtx: Added \@latex@info@no@line. - Added missing full stops. + * lterror.dtx: Added \@latex@info@no@line. + Added missing full stops. - * ltdefns.dtx: Renamed @checkcommand to CheckCommand. + * ltdefns.dtx: Renamed @checkcommand to CheckCommand. - * latex209.dst: Added t1enc.sty. + * latex209.dst: Added t1enc.sty. - * latex209.dtx: Changed \@finalstrut. - Added t1enc.sty. + * latex209.dtx: Changed \@finalstrut. + Added t1enc.sty. 1994-05-19 David Carlisle @@ -10659,8 +10781,8 @@ All changes above are only part of the development branch for the next release. reappear. * tltc001.tlg: Change in test2e setup causes box printout to - reappear, strut in footnotes back to old version for - compatibility mode. + reappear, strut in footnotes back to old version for + compatibility mode. 1994-05-18 Rainer Schoepf @@ -10689,18 +10811,18 @@ All changes above are only part of the development branch for the next release. 1994-05-18 Alan Jeffrey - * latex209.dtx: Added \@finalstrut. + * latex209.dtx: Added \@finalstrut. - * ltlogos.dtx: Added the TeX logo. - Made the LaTeX2e logo use the text font 2 rather than the math - font 2. + * ltlogos.dtx: Added the TeX logo. + Made the LaTeX2e logo use the text font 2 rather than the math + font 2. - * ltoutenc.dtx: Fixed a typo with fontenc.sty... it's - \encodingdefault, not \defaultencoding! + * ltoutenc.dtx: Fixed a typo with fontenc.sty... it's + \encodingdefault, not \defaultencoding! - * ltfinal.dtx: Corrected the lccode for d-bar. + * ltfinal.dtx: Corrected the lccode for d-bar. - * ltoutenc.dtx: Made \.i produce i. + * ltoutenc.dtx: Made \.i produce i. 1994-05-17 David Carlisle @@ -10766,19 +10888,19 @@ All changes above are only part of the development branch for the next release. 1994-05-17 Alan Jeffrey - * lterror.dtx: Moved error commands from ltdefns.dtx. + * lterror.dtx: Moved error commands from ltdefns.dtx. - * ltdefns.dtx: Added section on \protect. Moved error commands to - lterror.dtx. + * ltdefns.dtx: Added section on \protect. Moved error commands to + lterror.dtx. - * ltoutenc.dtx: Removed braces from \$ since they're now in - nfss@text. + * ltoutenc.dtx: Removed braces from \$ since they're now in + nfss@text. - * latex209.dtx: Fixed a bug with \ds@newlfont. - Removed extra spaces from the missing file error. - Commented out bezier with \iffalse...\fi rather than %% to avoid - bezier turning up in every file. - Corrected some documentation. + * latex209.dtx: Fixed a bug with \ds@newlfont. + Removed extra spaces from the missing file error. + Commented out bezier with \iffalse...\fi rather than %% to avoid + bezier turning up in every file. + Corrected some documentation. 1994-05-16 David Carlisle @@ -10786,7 +10908,7 @@ All changes above are only part of the development branch for the next release. and add extra braces so a_\ensuremath{foo} works. * ltoutput.dtx: Add \color@begingroup to protect \normalcolor. - move \normalcolor out of the inner box. + move \normalcolor out of the inner box. 1994-05-16 Rainer Schoepf @@ -10828,33 +10950,33 @@ All changes above are only part of the development branch for the next release. 1994-05-16 Alan Jeffrey - * ltcntrl.dtx: Split file from ltinit.dtx. + * ltcntrl.dtx: Split file from ltinit.dtx. - * ltcounts.dtx: Split file from ltinit.dtx. + * ltcounts.dtx: Split file from ltinit.dtx. - * ltdefns.dtx: Split file from ltinit.dtx. + * ltdefns.dtx: Split file from ltinit.dtx. - * lterror.dtx: Split file from ltinit.dtx. + * lterror.dtx: Split file from ltinit.dtx. - * ltlogos.dtx: Split file from ltinit.dtx. + * ltlogos.dtx: Split file from ltinit.dtx. - * ltpar.dtx: Split file from ltinit.dtx. + * ltpar.dtx: Split file from ltinit.dtx. - * ltspace.dtx: Split file from ltinit.dtx. + * ltspace.dtx: Split file from ltinit.dtx. - * ltoutenc.dtx: Removed \P, since it's not in the T1 encoding. - Added \r and \k accents. - Added \NG, \ng, \TH, \th, \DH, \dh, \DJ and \dj. + * ltoutenc.dtx: Removed \P, since it's not in the T1 encoding. + Added \r and \k accents. + Added \NG, \ng, \TH, \th, \DH, \dh, \DJ and \dj. - * latex209.dtx: Fixed a bug with \mediumseries. + * latex209.dtx: Fixed a bug with \mediumseries. - * ltoutenc.dtx: Redid fontenc.sty to use the new mixed-case - encoding files. - Fixed a bug with \pounds. + * ltoutenc.dtx: Redid fontenc.sty to use the new mixed-case + encoding files. + Fixed a bug with \pounds. - * latex209.dtx: Fixed a bug with the margid option. + * latex209.dtx: Fixed a bug with the margid option. - * ltfinal.dtx: Removed ot1enc.sty. + * ltfinal.dtx: Removed ot1enc.sty. 1994-05-15 Frank Mittelbach @@ -10867,7 +10989,7 @@ All changes above are only part of the development branch for the next release. 1994-05-15 Alan Jeffrey - * latex209.dtx: Added the nomargid and margid options. + * latex209.dtx: Added the nomargid and margid options. 1994-05-14 David Carlisle @@ -10898,7 +11020,7 @@ All changes above are only part of the development branch for the next release. code. * tracefnt.dtx (section{Macros common to \texttt{fam.tex} and - \texttt{tracefnt.sty}}): Added \enc@update to selectfont. + \texttt{tracefnt.sty}}): Added \enc@update to selectfont. * fam.dtx (section{Macros for setting up the tables}): Initialise \@cmd in \DeclareFontEncoding. @@ -10910,25 +11032,25 @@ All changes above are only part of the development branch for the next release. 1994-05-14 Alan Jeffrey - * ltoutenc.dtx: Renamed \ENC@cmd to \ENC-cmd, to avoid collisions - with commands like \U@cmd. + * ltoutenc.dtx: Renamed \ENC@cmd to \ENC-cmd, to avoid collisions + with commands like \U@cmd. - * ltoutenc.dst: Updated the dst file to match ltoutenc.dtx. + * ltoutenc.dst: Updated the dst file to match ltoutenc.dtx. - * latex209.dtx: Redid the oldlfont and newlfont options to set the - \@no@font@optfalse flag. + * latex209.dtx: Redid the oldlfont and newlfont options to set the + \@no@font@optfalse flag. - * fontsmpl.dtx: Split font sample document and package out of - ltoutenc. + * fontsmpl.dtx: Split font sample document and package out of + ltoutenc. - * ltoutenc.dtx: Stopped commands declared with DeclareTextWidget - from going into an infinite loop if f@encoding isn't the current - encoding. - Added fontenc package. - Made ot1enc.def and t1enc.def files rather than packages. + * ltoutenc.dtx: Stopped commands declared with DeclareTextWidget + from going into an infinite loop if f@encoding isn't the current + encoding. + Added fontenc package. + Made ot1enc.def and t1enc.def files rather than packages. - * latex209.dtx: Changed how 2e commands are switched off. - Removed the date from the announcement of 2.09 mode. + * latex209.dtx: Changed how 2e commands are switched off. + Removed the date from the announcement of 2.09 mode. 1994-05-13 David Carlisle @@ -10948,10 +11070,10 @@ All changes above are only part of the development branch for the next release. * ltboxes.dtx: New accent handling in parboxrestore. * newlfont.dtx: \DeclareProtectedCommand now - \DeclareRobustCommand + \DeclareRobustCommand * oldlfont.dtx: \DeclareProtectedCommand now - \DeclareRobustCommand + \DeclareRobustCommand * ltpictur.dtx: Removed unnecessary braces from \@ifnextchar and \@ifstar constructions. @@ -11018,35 +11140,35 @@ All changes above are only part of the development branch for the next release. 1994-05-13 Alan Jeffrey - * ltinit.dtx: Added \@backslashchar. - Improved coding of \@ifdefinable. + * ltinit.dtx: Added \@backslashchar. + Improved coding of \@ifdefinable. - * testdist.dtx: Improved documentation. + * testdist.dtx: Improved documentation. - * emtex.l2e: Created this file. + * emtex.l2e: Created this file. - * ltfinal.dtx: Loaded package ot1enc, and defined \@acci and - friends. + * ltfinal.dtx: Loaded package ot1enc, and defined \@acci and + friends. - * ltinit.dtx: Added logging to DeclareProtectedCommand. + * ltinit.dtx: Added logging to DeclareProtectedCommand. - * ltoutenc.dtx: Renamed accents.dtx to ltoutenc.dtx. - After all these months It's now a real bit of kernel! :-) + * ltoutenc.dtx: Renamed accents.dtx to ltoutenc.dtx. + After all these months It's now a real bit of kernel! :-) - * accents.dtx: Replaces \space by ` ' in csname. + * accents.dtx: Replaces \space by ` ' in csname. - * ltinit.dtx: Replaced \space by ` ' in \csname + * ltinit.dtx: Replaced \space by ` ' in \csname - * accents.dtx: Added \{, \} and \$. + * accents.dtx: Added \{, \} and \$. - * ltinit.dtx: Renamed DeclareProtectedCommand to - DeclareRobustCommand. - Moved DeclareRobustCommand after @gobble. - Removed @if@short@command. - Removed \{ and \}. + * ltinit.dtx: Renamed DeclareProtectedCommand to + DeclareRobustCommand. + Moved DeclareRobustCommand after @gobble. + Removed @if@short@command. + Removed \{ and \}. - * accents.dtx: Redid all the kernel commands. Made t1.def and - ot1.def into t1enc.sty and ot1enc.sty. + * accents.dtx: Redid all the kernel commands. Made t1.def and + ot1.def into t1enc.sty and ot1enc.sty. 1994-05-12 Braams J.L. @@ -11129,7 +11251,7 @@ All changes above are only part of the development branch for the next release. 1994-05-12 Alan Jeffrey - * ltinit.dtx: Fixed a bug with DeclareProtectedCommand. + * ltinit.dtx: Fixed a bug with DeclareProtectedCommand. 1994-05-11 Braams J.L. @@ -11148,18 +11270,18 @@ All changes above are only part of the development branch for the next release. 1994-05-11 Alan Jeffrey - * ltinit.dtx: Moved the logos to after \DeclareProtectedCommand. - Defined them using \DeclareProtectedCommand. - Made the SLiTeX logo use the TeX logo. - Made \, and \hspace use \DeclareProtectedCommand. + * ltinit.dtx: Moved the logos to after \DeclareProtectedCommand. + Defined them using \DeclareProtectedCommand. + Made the SLiTeX logo use the TeX logo. + Made \, and \hspace use \DeclareProtectedCommand. - * ltfinal.dtx: Added %%% ltfinal.dtx line. + * ltfinal.dtx: Added %%% ltfinal.dtx line. - * ltinit.dtx: Added %%% ltinit.dtx line. + * ltinit.dtx: Added %%% ltinit.dtx line. - * latex209.dst: Added dummy bezier.sty. + * latex209.dst: Added dummy bezier.sty. - * latex209.dtx: Added dummy bezier.sty. + * latex209.dtx: Added dummy bezier.sty. 1994-05-10 Rainer Schoepf @@ -11168,10 +11290,10 @@ All changes above are only part of the development branch for the next release. 1994-05-10 Alan Jeffrey - * ltinit.dtx: Added documentation sent by DPC. - Moved \makeatletter and \maketother into ltinit. - Added extra ^^Js to \@latexerr. - Removed a couple of spurious braces. + * ltinit.dtx: Added documentation sent by DPC. + Moved \makeatletter and \maketother into ltinit. + Added extra ^^Js to \@latexerr. + Removed a couple of spurious braces. 1994-05-09 Rainer Schoepf @@ -11230,9 +11352,9 @@ All changes above are only part of the development branch for the next release. 1994-05-08 Alan Jeffrey - * somedefs.dtx: Produced v0.01. + * somedefs.dtx: Produced v0.01. - * rawfonts.dtx: Produced v0.01, using somedefs.dtx. + * rawfonts.dtx: Produced v0.01, using somedefs.dtx. 1994-05-07 Frank Mittelbach @@ -11282,7 +11404,7 @@ All changes above are only part of the development branch for the next release. 1994-05-05 Alan Jeffrey - * ltfinal.dtx: Added empty \errhelp. + * ltfinal.dtx: Added empty \errhelp. 1994-05-04 David Carlisle @@ -11334,7 +11456,7 @@ All changes above are only part of the development branch for the next release. 1994-05-03 Alan Jeffrey - * ltfinal.dtx: Set the catcode of ^^J to other. + * ltfinal.dtx: Set the catcode of ^^J to other. Removed \@undefinedfonterror. @@ -11350,16 +11472,16 @@ All changes above are only part of the development branch for the next release. 1994-05-02 Alan Jeffrey - * latex209.dtx: Redid the method of switching off 2e commands. + * latex209.dtx: Redid the method of switching off 2e commands. - * ltfinal.dtx: Set all the catcodes before dumping. Made 127 - illegal. + * ltfinal.dtx: Set all the catcodes before dumping. Made 127 + illegal. - * install.l2e: Added yandytex.l2e + * install.l2e: Added yandytex.l2e - * accents.dtx: Rewrote almost everything from scratch. + * accents.dtx: Rewrote almost everything from scratch. - * yandytex.l2e: Installed a file from Berthold + * yandytex.l2e: Installed a file from Berthold Corrected \@fontswitch. @@ -11367,9 +11489,9 @@ All changes above are only part of the development branch for the next release. * ltfloat.dtx (subsection{Floating Environments}): - Added \@largefloatcheck. + Added \@largefloatcheck. - Removed unnecessary braces from arguments of \@ifnextchar. + Removed unnecessary braces from arguments of \@ifnextchar. 1994-05-01 Braams J.L. @@ -11394,7 +11516,7 @@ All changes above are only part of the development branch for the next release. 1994-04-30 Chris Rowley - * ltinit.dtx: + * ltinit.dtx: Added latexinfo commands. @@ -11407,11 +11529,11 @@ All changes above are only part of the development branch for the next release. Changed to, eg, v1.0l. - * ltoutput.dtx: + * ltoutput.dtx: - Rogue space removed. + Rogue space removed. - Cut-off points for adding \@emptycol changed. + Cut-off points for adding \@emptycol changed. Empty column action added: \@emptycol. @@ -11577,10 +11699,10 @@ All changes above are only part of the development branch for the next release. 1994-04-21 Alan Jeffrey - * install.l2e: Corrected the wording of the bug report. + * install.l2e: Corrected the wording of the bug report. - * ltfinal.dtx: Added some documentation, incorporated ltcodes.dtx. - This now includes setting the catcodes of 128--255 to `illegal'. + * ltfinal.dtx: Added some documentation, incorporated ltcodes.dtx. + This now includes setting the catcodes of 128--255 to `illegal'. 1994-04-20 David Carlisle @@ -11606,7 +11728,7 @@ All changes above are only part of the development branch for the next release. 1994-04-20 Alan Jeffrey - * latex209.dtx: Redefined \verbatim@noligs@list. + * latex209.dtx: Redefined \verbatim@noligs@list. 1994-04-19 David Carlisle @@ -11639,7 +11761,7 @@ All changes above are only part of the development branch for the next release. \no@alphabet@help removed. * tracefnt.dtx: - Changed line breaks and wording in some messages. + Changed line breaks and wording in some messages. Removed surplus "." from some warning messages. All warning/error messages changed to start "LaTeX Font Warning" etc. Continuation lines are changed to "(Font)". @@ -11650,15 +11772,15 @@ All changes above are only part of the development branch for the next release. 1994-04-18 Alan Jeffrey - * web2ctex.l2e: Changed name from unixtex.l2e. Changed the - example shell script to look for a LATEX209INPUTS environment - variable. + * web2ctex.l2e: Changed name from unixtex.l2e. Changed the + example shell script to look for a LATEX209INPUTS environment + variable. - * install.l2e: Changed name of unixtex.l2e to - web2ctex.l2e. + * install.l2e: Changed name of unixtex.l2e to + web2ctex.l2e. - * latint.dtx: Changed \font@warning to \font@log for redefining - math alphabets and symbol fonts. + * latint.dtx: Changed \font@warning to \font@log for redefining + math alphabets and symbol fonts. 1994-04-17 Frank Mittelbach @@ -11713,10 +11835,10 @@ All changes above are only part of the development branch for the next release. 1994-04-14 Alan Jeffrey - * latexbug.tex: Changed the prompt for `a list of files' to a - prompt for a single filename. Made latexbug look to see if it - could find the file, and if it can, it includes the file and the - logfile in the latexbug.msg. + * latexbug.tex: Changed the prompt for `a list of files' to a + prompt for a single filename. Made latexbug look to see if it + could find the file, and if it can, it includes the file and the + logfile in the latexbug.msg. 1994-04-12 David Carlisle @@ -11740,7 +11862,7 @@ All changes above are only part of the development branch for the next release. 1994-04-12 Alan Jeffrey - * oztex.l2e: Added warning that lines are > 80 chars + * oztex.l2e: Added warning that lines are > 80 chars 1994-04-11 Braams J.L. @@ -11772,18 +11894,18 @@ All changes above are only part of the development branch for the next release. 1994-04-11 Alan Jeffrey - * fam.dtx: Added `defaultscriptratio and - `defaultscriptscriptratio. + * fam.dtx: Added `defaultscriptratio and + `defaultscriptscriptratio. - * latex209.dtx: Switched off `enlargethispage and the `!' float - option. + * latex209.dtx: Switched off `enlargethispage and the `!' float + option. 1994-04-10 Alan Jeffrey - * install.l2e: Split the installation guide into install.l2e, - texpert.l2e, and system-specific oztex.l2e and unixtex.l2e files. + * install.l2e: Split the installation guide into install.l2e, + texpert.l2e, and system-specific oztex.l2e and unixtex.l2e files. - * template.l2e: Created a template for system.l2e files. + * template.l2e: Created a template for system.l2e files. 1994-04-09 Frank Mittelbach @@ -11800,15 +11922,15 @@ All changes above are only part of the development branch for the next release. 1994-04-05 Alan Jeffrey - * latex209.dtx: Switched off `lrbox, `width, `height and `depth in - 2.09 mode. + * latex209.dtx: Switched off `lrbox, `width, `height and `depth in + 2.09 mode. - Removed optional arguments to `parbox, `minipage and `newcommand. + Removed optional arguments to `parbox, `minipage and `newcommand. - Made `ProvidesPackage and `ProvidesClass produce log entries - rather than warnings. + Made `ProvidesPackage and `ProvidesClass produce log entries + rather than warnings. - Removed `filedate. + Removed `filedate. 1994-03-31 David Carlisle @@ -12015,13 +12137,13 @@ All changes above are only part of the development branch for the next release. Corrected unpacking for ltxdoc.cls (change of docstrip module). * classes.dtx - (subsubsection{The dimension of text}): + (subsubsection{The dimension of text}): Use same default values for native mode as in old styles. (section{Identification}): Added file versions to the \Provides... commands - (subsection{Footnotes}): + (subsection{Footnotes}): Use \@makefnmark rather than its expansion in the definition of \@makefntext. @@ -12058,7 +12180,7 @@ All changes above are only part of the development branch for the next release. 1994-03-12 Frank Mittelbach * classes.dtx - (section{Identification}): + (section{Identification}): Removed \typeout statements since this is now handled by \Provide... @@ -12337,7 +12459,7 @@ All changes above are only part of the development branch for the next release. * ltxdoc.dtx: Added driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. Set counter StandardModuleDepth to 1, since all ltx documentation needs that setting anyway. @@ -12408,7 +12530,7 @@ All changes above are only part of the development branch for the next release. * oldgerm.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. Removed extra pair of braces after \DeclareFontFamily which has only three arguments not four. @@ -12422,7 +12544,7 @@ All changes above are only part of the development branch for the next release. * varioref.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. 1994-02-27 Frank Mittelbach @@ -12436,994 +12558,994 @@ All changes above are only part of the development branch for the next release. * eufrak.dtx: Changed driver code slightly. Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * euscript.dtx: Changed driver code slightly. Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * exscale.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * nfssfont.dtx: Added to the distribution. Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * docstrip.dtx (section{Producing the documentation}): Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * oldlfont.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * latexsym.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * newlfont.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * pandora.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * preload.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * lhyphen.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * fontdef.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. * fontcmds.dtx: Moved the driver code in front so that the documentation can be - processed by simply running the file through LaTeX2e. + processed by simply running the file through LaTeX2e. 1994-02-24 Frank Mittelbach - * ltdirchk.dtx: 0.2j "General" \noboundaryis \relax not undef in - TeX2 (initialised in 2e format) + * ltdirchk.dtx: 0.2j "General" \noboundaryis \relax not undef in + TeX2 (initialised in 2e format) - * ltdirchk.dtx: 0.2j "General" Remove need for drv file + * ltdirchk.dtx: 0.2j "General" Remove need for drv file * fam.dtx (subsection{Macros for loading fonts}): - Removed catcode settings from \try@load@fontshape and + Removed catcode settings from \try@load@fontshape and \DeclareFontShape and placed them into a separate macro called \nfss@catcodes so that it is easier to maintain special requirements for packages that make certain characters active. 1994-02-10 Alan Jeffrey - * ltclass.dtx: 0.2z \@fileswithoptions Renamed \@compatibility to - \@documentclasshook. ASAJ. + * ltclass.dtx: 0.2z \@fileswithoptions Renamed \@compatibility to + \@documentclasshook. ASAJ. - * ltclass.dtx: 0.2z \@documentclasshook Changed the name from - \@compatibility to \@documentclasshook, and added the check - for whether \@normalsize has been defined. ASAJ. + * ltclass.dtx: 0.2z \@documentclasshook Changed the name from + \@compatibility to \@documentclasshook, and added the check + for whether \@normalsize has been defined. ASAJ. 1994-02-07 Alan Jeffrey - * ltclass.dtx: 0.2y \ProcessOptions* Add extra ,s so `two' is not - matched with `twocolumn' + * ltclass.dtx: 0.2y \ProcessOptions* Add extra ,s so `two' is not + matched with `twocolumn' - * ltclass.dtx: 0.2y \ProcessOptions* Add extra ,s so `two' is not - matched with `twocolumn' + * ltclass.dtx: 0.2y \ProcessOptions* Add extra ,s so `two' is not + matched with `twocolumn' - * ltclass.dtx: 0.2y \@ifclasswith Add extra ,s so `two' is not - matched with `twocolumn' + * ltclass.dtx: 0.2y \@ifclasswith Add extra ,s so `two' is not + matched with `twocolumn' - * ltclass.dtx: 0.2y \@fileswithoptions Run \@compatibility on the - first class to start (not the first to finish) + * ltclass.dtx: 0.2y \@fileswithoptions Run \@compatibility on the + first class to start (not the first to finish) 1994-02-03 N.N. - * ltinit.dtx: LaTeX2e "General" correct mistakes in the - documentation + * ltinit.dtx: LaTeX2e "General" correct mistakes in the + documentation 1994-02-02 N.N. - * ltclass.dtx: 0.2x \@fileswithoptions Only run the hook and - options check if the file was loaded. + * ltclass.dtx: 0.2x \@fileswithoptions Only run the hook and + options check if the file was loaded. 1994-02-01 David Carlisle - * ltherest.dtx: LaTeX2e \thispagestyle (DPC) Modify to get nicer - error message + * ltherest.dtx: LaTeX2e \thispagestyle (DPC) Modify to get nicer + error message - * ltherest.dtx: LaTeX2e \pagestyle (DPC) Modify to get nicer - error message + * ltherest.dtx: LaTeX2e \pagestyle (DPC) Modify to get nicer + error message 1994-01-31 N.N. - * ltinit.dtx: LaTeX2e "General" use \@normalsize instead of - \normalsizeinternally + * ltinit.dtx: LaTeX2e "General" use \@normalsize instead of + \normalsizeinternally - * ltfiles.dtx: v0.9t \document set `@normalsize or `normalsize if - necessary + * ltfiles.dtx: v0.9t \document set `@normalsize or `normalsize if + necessary - * ltclass.dtx: 0.2w \g@addto@macro Use toks register to avoid - `hash' problems + * ltclass.dtx: 0.2w \g@addto@macro Use toks register to avoid + `hash' problems - * fontcmds.dtx: v3.1b "General" `@normalsize no longer defined + * fontcmds.dtx: v3.1b "General" `@normalsize no longer defined 1994-01-29 N.N. - * ltclass.dtx: 0.2v \@fileswithoptions All options raise error if - no \ProcessOptions\ appears + * ltclass.dtx: 0.2v \@fileswithoptions All options raise error if + no \ProcessOptions\ appears - * ltclass.dtx: 0.2v \@@unprocessedoptions Macro added. + * ltclass.dtx: 0.2v \@@unprocessedoptions Macro added. 1994-01-28 N.N. - * ltinit.dtx: LaTeX2e "General" Let \fmtversion point to current - file date. + * ltinit.dtx: LaTeX2e "General" Let \fmtversion point to current + file date. 1994-01-27 N.N. - * fontcmds.dtx: v3.1a \nocorrlist Only ., used as default for cm - fonts + * fontcmds.dtx: v3.1a \nocorrlist Only ., used as default for cm + fonts 1994-01-25 David Carlisle - * ltplain.dtx: LaTeX2e \bordermatrix Removed \p@renwd. + * ltplain.dtx: LaTeX2e \bordermatrix Removed \p@renwd. - * ltdirchk.dtx: 0.2i "General" Protect against looping on - \@@input and \@@end + * ltdirchk.dtx: 0.2i "General" Protect against looping on + \@@input and \@@end 1994-01-24 David Carlisle - * ltherest.dtx: LaTeX2e \pagestyle (DPC) Complain if pagestyle is - undefined. + * ltherest.dtx: LaTeX2e \pagestyle (DPC) Complain if pagestyle is + undefined. - * ltdirchk.dtx: 0.2h \IfFileExists Stop testing once texsys.aux - has been found + * ltdirchk.dtx: 0.2h \IfFileExists Stop testing once texsys.aux + has been found 1994-01-21 David Carlisle - * ltmiscen.dtx: v0.9s \verbatim@font Removed unnecessary category - code hackery. + * ltmiscen.dtx: v0.9s \verbatim@font Removed unnecessary category + code hackery. - * ltherest.dtx: LaTeX2e \@xfloat Added missing percent - characters. + * ltherest.dtx: LaTeX2e \@xfloat Added missing percent + characters. - * ltdirchk.dtx: 0.2g \today Name changeed from \stamp, to save - memory + * ltdirchk.dtx: 0.2g \today Name changeed from \stamp, to save + memory - * ltdirchk.dtx: 0.2g \filename@parse Minor changes, and add Mac - version (:) + * ltdirchk.dtx: 0.2g \filename@parse Minor changes, and add Mac + version (:) - * ltdirchk.dtx: 0.2g "General" Improve documentation, reorganise - docstrip module + * ltdirchk.dtx: 0.2g "General" Improve documentation, reorganise + docstrip module - * ltclass.dtx: 0.2u \documentstyle compatibility file now - latex209.def. + * ltclass.dtx: 0.2u \documentstyle compatibility file now + latex209.def. 1994-01-20 David Carlisle - * ltdirchk.dtx: 0.2f \IfFileExists \@copytexsys removed + * ltdirchk.dtx: 0.2f \IfFileExists \@copytexsys removed - * ltdirchk.dtx: 0.2f "General" \@copytexsys and the texsys.new - file removed + * ltdirchk.dtx: 0.2f "General" \@copytexsys and the texsys.new + file removed - * ltdirchk.dtx: 0.2f "General" Modify all of ltxcheck + * ltdirchk.dtx: 0.2f "General" Modify all of ltxcheck 1994-01-19 David Carlisle - * ltdirchk.dtx: 0.2e \strip@prefix name changed from - \strip@meaning, to match NFSS + * ltdirchk.dtx: 0.2e \strip@prefix name changed from + \strip@meaning, to match NFSS - * ltdirchk.dtx: 0.2e \input@path No longer check that an empty - group is in the path + * ltdirchk.dtx: 0.2e \input@path No longer check that an empty + group is in the path - * ltdirchk.dtx: 0.2e \IfFileExists name changed from \test + * ltdirchk.dtx: 0.2e \IfFileExists name changed from \test 1994-01-18 N.N. - * ltmiscen.dtx: v0.9p \@verbatim Only add \penaltyif in hmode + * ltmiscen.dtx: v0.9p \@verbatim Only add \penaltyif in hmode - * ltherest.dtx: LaTeX2e \bibliography Use \@input@ so include - files are listed. + * ltherest.dtx: LaTeX2e \bibliography Use \@input@ so include + files are listed. - * ltfiles.dtx: v0.9p \include Use \@input@ so include files are - listed. + * ltfiles.dtx: v0.9p \include Use \@input@ so include files are + listed. - * ltfiles.dtx: v0.9p \InputIfFileExists New Definition + * ltfiles.dtx: v0.9p \InputIfFileExists New Definition - * ltfiles.dtx: v0.9p \IfFileExists New Definition + * ltfiles.dtx: v0.9p \IfFileExists New Definition - * ltfiles.dtx: v0.9p \@input@ Macro added + * ltfiles.dtx: v0.9p \@input@ Macro added - * ltfiles.dtx: v0.9p \@input do not use a different definition - for \input@path + * ltfiles.dtx: v0.9p \@input do not use a different definition + for \input@path - * ltfiles.dtx: v0.9p \@iffileonpath Macro added + * ltfiles.dtx: v0.9p \@iffileonpath Macro added - * ltfiles.dtx: v0.9p \@break@loop Macro added + * ltfiles.dtx: v0.9p \@break@loop Macro added - * ltclass.dtx: 0.2t \@ifclassloaded Fix typo \@pkgetension + * ltclass.dtx: 0.2t \@ifclassloaded Fix typo \@pkgetension 1994-01-17 N.N. - * ltclass.dtx: 0.2s \listfiles New Version, adds `.tex' if - needed, and lines up columns + * ltclass.dtx: 0.2s \listfiles New Version, adds `.tex' if + needed, and lines up columns - * ltclass.dtx: 0.2s "General" Wrapped long lines to column 72 + * ltclass.dtx: 0.2s "General" Wrapped long lines to column 72 - * ltclass.dtx: 0.2s "General" Added many more \@onlypreamble - commands + * ltclass.dtx: 0.2s "General" Added many more \@onlypreamble + commands - * ltclass.dtx: 0.2s \@fileswithoptions Modify to reduce parameter - stack usage + * ltclass.dtx: 0.2s \@fileswithoptions Modify to reduce parameter + stack usage - * ltclass.dtx: 0.2s \@fileswithoptions Modify to reduce parameter - stack usage + * ltclass.dtx: 0.2s \@fileswithoptions Modify to reduce parameter + stack usage 1994-01-15 N.N. - * ltfiles.dtx: v0.9o \document move `@preamblecmds after document - hook + * ltfiles.dtx: v0.9o \document move `@preamblecmds after document + hook 1994-01-14 David Carlisle - * ltdirchk.dtx: 0.2d \IfFileExists Close the texsys.aux output - stream + * ltdirchk.dtx: 0.2d \IfFileExists Close the texsys.aux output + stream 1993-12-20 N.N. - * ltinit.dtx: LaTeX2e \@reargdef Kept old version of \@reargdef, - for array.sty + * ltinit.dtx: LaTeX2e \@reargdef Kept old version of \@reargdef, + for array.sty - * ltfiles.dtx: 0.9m \@obsoletefile Added this command, removed - @oldfilewarning + * ltfiles.dtx: 0.9m \@obsoletefile Added this command, removed + @oldfilewarning 1993-12-19 Alan Jeffrey - * ltinit.dtx: LaTeX2e \@esphack There seem to be problems with - selfmade birthday presents + * ltinit.dtx: LaTeX2e \@esphack There seem to be problems with + selfmade birthday presents - * ltclass.dtx: 0.2r \endfilecontents Different message when - ignoring a file + * ltclass.dtx: 0.2r \endfilecontents Different message when + ignoring a file - * fontcmds.dtx: v3.0b "General" Untidying added, so this is now a - TEMPORARY version. + * fontcmds.dtx: v3.0b "General" Untidying added, so this is now a + TEMPORARY version. - * fontcmds.dtx: v3.0b "General" Some more tidying done. + * fontcmds.dtx: v3.0b "General" Some more tidying done. - * fontcmds.dtx: v3.0b "General" Other tidying + * fontcmds.dtx: v3.0b "General" Other tidying - * fontcmds.dtx: v3.0b "General" @pdef comand added + * fontcmds.dtx: v3.0b "General" @pdef comand added - * fontcmds.dtx: v3.0b \@protecteddef Command added + * fontcmds.dtx: v3.0b \@protecteddef Command added - * fontcmds.dtx: v3.0b \@newtextcmd Corrected and tidied + * fontcmds.dtx: v3.0b \@newtextcmd Corrected and tidied - * fontcmds.dtx: v3.0b \@newfontswitch Corrected and tidied + * fontcmds.dtx: v3.0b \@newfontswitch Corrected and tidied - * fontcmds.dtx: 3.0b "General" Wording changes by CAR. + * fontcmds.dtx: 3.0b "General" Wording changes by CAR. - * fontcmds.dtx: 3.0b "General" Made \@newfontswitch produce an - error if the command already exists, and added - \@renewfontswitch. ASAJ. + * fontcmds.dtx: 3.0b "General" Made \@newfontswitch produce an + error if the command already exists, and added + \@renewfontswitch. ASAJ. - * fontcmds.dtx: 3.0b "General" Added by ASAJ. + * fontcmds.dtx: 3.0b "General" Added by ASAJ. 1993-12-17 N.N. - * ltoutput.dtx: v1.0j \@tracemessage tracefloatvals made a - document command + * ltoutput.dtx: v1.0j \@tracemessage tracefloatvals made a + document command - * ltoutput.dtx: v1.0j \@topnewpage check for vsize too small - added + * ltoutput.dtx: v1.0j \@topnewpage check for vsize too small + added - * ltoutput.dtx: v1.0j \@startpagehook Hook removed + * ltoutput.dtx: v1.0j \@startpagehook Hook removed - * ltoutput.dtx: v1.0j \@opcol Hook removed + * ltoutput.dtx: v1.0j \@opcol Hook removed - * ltoutput.dtx: 1.0j \@topnewpage Page room test added + * ltoutput.dtx: 1.0j \@topnewpage Page room test added - * ltoutput.dtx: 1.0j \@specialoutput Page room test added + * ltoutput.dtx: 1.0j \@specialoutput Page room test added - * ltoutput.dtx: 1.0j \@addtocurcol Extra space test added + * ltoutput.dtx: 1.0j \@addtocurcol Extra space test added - * ltherest.dtx: LaTeX2e \mark Removed init \mark at begin - document, since it doesn't work. + * ltherest.dtx: LaTeX2e \mark Removed init \mark at begin + document, since it doesn't work. - * ltclass.dtx: 0.2q \documentstyle Match Alan's new code. + * ltclass.dtx: 0.2q \documentstyle Match Alan's new code. - * ltclass.dtx: 0.2q \@fileswithoptions Add \ompatibility hook + * ltclass.dtx: 0.2q \@fileswithoptions Add \ompatibility hook - * ltclass.dtx: 0.2q \@documentclasshook Macro added + * ltclass.dtx: 0.2q \@documentclasshook Macro added - * ltmiscen.dtx: v0.9i \literal Macro added + * ltmiscen.dtx: v0.9i \literal Macro added 1993-12-16 N.N. - * ltinit.dtx: LaTeX2e \LaTeXe Extended logo by DPC + * ltinit.dtx: LaTeX2e \LaTeXe Extended logo by DPC - * ltinit.dtx: LaTeX2e \@esphack Corrected optimisation :-) + * ltinit.dtx: LaTeX2e \@esphack Corrected optimisation :-) - * ltherest.dtx: LaTeX2e \mark Init \mark at begin document + * ltherest.dtx: LaTeX2e \mark Init \mark at begin document 1993-12-15 N.N. - * ltclass.dtx: 0.2p "General" Removed extra \.'s from \@@warnings + * ltclass.dtx: 0.2p "General" Removed extra \.'s from \@@warnings - * ltboxes.dtx: 0.1d \parbox Changed default from `c' to `s' + * ltboxes.dtx: 0.1d \parbox Changed default from `c' to `s' - * ltboxes.dtx: 0.1d \minipage extra space removed. + * ltboxes.dtx: 0.1d \minipage extra space removed. - * ltboxes.dtx: 0.1d \minipage Changed default from `c' to `s' + * ltboxes.dtx: 0.1d \minipage Changed default from `c' to `s' - * ltboxes.dtx: 0.1d \@iparbox Changed default from `c' to `s' + * ltboxes.dtx: 0.1d \@iparbox Changed default from `c' to `s' - * ltboxes.dtx: 0.1d \@iminipage Changed default from `c' to `s' + * ltboxes.dtx: 0.1d \@iminipage Changed default from `c' to `s' 1993-12-14 N.N. - * ltoutput.dtx: v1.0i "General" Section added to declare all - parameters + * ltoutput.dtx: v1.0i "General" Section added to declare all + parameters 1993-12-13 David Carlisle - * ltlists.dtx: LaTeX2e Initialised \@itemlabel + * ltlists.dtx: LaTeX2e Initialised \@itemlabel - * ltmiscen.dtx: v0.9h \@verbatim Removed optional argument of - \item + * ltmiscen.dtx: v0.9h \@verbatim Removed optional argument of + \item - * ltmiscen.dtx: v0.9h \@verbatim Readded \@noligs + * ltmiscen.dtx: v0.9h \@verbatim Readded \@noligs - * ltmiscen.dtx: v0.9h \@noligs Readded \@noligs + * ltmiscen.dtx: v0.9h \@noligs Readded \@noligs - * ltdirchk.dtx: 0.2a \strip@prefix modified, name changed from - \stripmeaning + * ltdirchk.dtx: 0.2a \strip@prefix modified, name changed from + \stripmeaning - * ltdirchk.dtx: 0.2a \IfFileExists Removed interactive prompting - for current directory syntax + * ltdirchk.dtx: 0.2a \IfFileExists Removed interactive prompting + for current directory syntax - * ltdirchk.dtx: 0.2a "General" on the `docstrip' pass, do not - check openin path + * ltdirchk.dtx: 0.2a "General" on the `docstrip' pass, do not + check openin path - * ltclass.dtx: 0.2o \usepackage Fixed error handling + * ltclass.dtx: 0.2o \usepackage Fixed error handling - * ltclass.dtx: 0.2o \documentstyle compatibility file now - latex209.sty. + * ltclass.dtx: 0.2o \documentstyle compatibility file now + latex209.sty. - * ltclass.dtx: 0.2o "General" Removed setting \errcontextlines\ - (now in latex.tex) + * ltclass.dtx: 0.2o "General" Removed setting \errcontextlines\ + (now in latex.tex) 1993-12-12 N.N. - * ltoutput.dtx: v1.0h \@tracemessage Commands changed + * ltoutput.dtx: v1.0h \@tracemessage Commands changed - * ltoutput.dtx: v1.0h \@testfp defs changed to lets + * ltoutput.dtx: v1.0h \@testfp defs changed to lets - * ltoutput.dtx: v1.0h \@startdblcolumn defs changed to lets + * ltoutput.dtx: v1.0h \@startdblcolumn defs changed to lets - * ltoutput.dtx: v1.0h \@startcolumn defs changed to lets + * ltoutput.dtx: v1.0h \@startcolumn defs changed to lets - * ltoutput.dtx: v1.0h \@resethfps Warnings added: minimal + * ltoutput.dtx: v1.0h \@resethfps Warnings added: minimal - * ltoutput.dtx: v1.0h \@makecol defs changed to lets + * ltoutput.dtx: v1.0h \@makecol defs changed to lets - * ltoutput.dtx: v1.0h \@doclearpage defs changed to lets + * ltoutput.dtx: v1.0h \@doclearpage defs changed to lets - * ltoutput.dtx: v1.0h \@doclearpage defs changed to lets + * ltoutput.dtx: v1.0h \@doclearpage defs changed to lets - * ltoutput.dtx: v1.0h \@doclearpage defs changed to lets + * ltoutput.dtx: v1.0h \@doclearpage defs changed to lets - * ltoutput.dtx: v1.0h \@cflt name changed + * ltoutput.dtx: v1.0h \@cflt name changed - * ltoutput.dtx: v1.0h \@ccflb defs changed to lets + * ltoutput.dtx: v1.0h \@ccflb defs changed to lets - * ltoutput.dtx: v1.0h \@ccflb boxmaxdepth setting moved + * ltoutput.dtx: v1.0h \@ccflb boxmaxdepth setting moved 1993-12-11 N.N. - * ltmiscen.dtx: v0.9g \ref Macro reimplemented + * ltmiscen.dtx: v0.9g \ref Macro reimplemented - * ltmiscen.dtx: v0.9g \pageref Macro reimplemented + * ltmiscen.dtx: v0.9g \pageref Macro reimplemented - * ltmiscen.dtx: v0.9g \frac Added group around first arg + * ltmiscen.dtx: v0.9g \frac Added group around first arg - * ltmiscen.dtx: v0.9g \@setref Macro added + * ltmiscen.dtx: v0.9g \@setref Macro added - * ltherest.dtx: LaTeX2e \@title Added default + * ltherest.dtx: LaTeX2e \@title Added default - * ltherest.dtx: LaTeX2e \@author Added default + * ltherest.dtx: LaTeX2e \@author Added default - * fontcmds.dtx: v3.0a \textup Macros changed + * fontcmds.dtx: v3.0a \textup Macros changed - * fontcmds.dtx: v3.0a \sw@slant Macro changed + * fontcmds.dtx: v3.0a \sw@slant Macro changed - * fontcmds.dtx: v3.0a \maybe@ic@ Macro and name changed + * fontcmds.dtx: v3.0a \maybe@ic@ Macro and name changed - * fontcmds.dtx: v3.0a \maybe@ic Macro name changed + * fontcmds.dtx: v3.0a \maybe@ic Macro name changed - * fontcmds.dtx: v3.0a \fix@penalty Macro added + * fontcmds.dtx: v3.0a \fix@penalty Macro added - * fontcmds.dtx: v3.0a \emph Macro changed + * fontcmds.dtx: v3.0a \emph Macro changed - * fontcmds.dtx: v3.0a "General" newfontswitch command corrected - and changed + * fontcmds.dtx: v3.0a "General" newfontswitch command corrected + and changed - * fontcmds.dtx: v3.0a "General" newcommands replaced by defs + * fontcmds.dtx: v3.0a "General" newcommands replaced by defs - * fontcmds.dtx: v3.0a "General" italic correction now put in - front of penalty before glue + * fontcmds.dtx: v3.0a "General" italic correction now put in + front of penalty before glue - * fontcmds.dtx: v3.0a "General" Complete reworking of all text - commands, using just one creator function + * fontcmds.dtx: v3.0a "General" Complete reworking of all text + commands, using just one creator function - * fontcmds.dtx: v3.0a \@newtextcmd Macro changed + * fontcmds.dtx: v3.0a \@newtextcmd Macro changed 1993-12-09 N.N. - * ltmiscen.dtx: v0.9e \enddocument Hook added + * ltmiscen.dtx: v0.9e \enddocument Hook added - * ltfiles.dtx: v0.9e \document Hook added + * ltfiles.dtx: v0.9e \document Hook added - * ltclass.dtx: 0.2n \documentstyle input 209 compatibility file. + * ltclass.dtx: 0.2n \documentstyle input 209 compatibility file. - * ltboxes.dtx: 0.1c \@irsbox fix another typo + * ltboxes.dtx: 0.1c \@irsbox fix another typo 1993-12-08 N.N. - * ltlists.dtx: LaTeX2e \@item use \sboxto support colour + * ltlists.dtx: LaTeX2e \@item use \sboxto support colour - * ltinit.dtx: LaTeX2e \@vbsphack Command added + * ltinit.dtx: LaTeX2e \@vbsphack Command added - * ltinit.dtx: LaTeX2e \@esphack Command reimplemented + * ltinit.dtx: LaTeX2e \@esphack Command reimplemented - * ltinit.dtx: LaTeX2e \@bsphack Command reimplemented; late - birthday present for Chris + * ltinit.dtx: LaTeX2e \@bsphack Command reimplemented; late + birthday present for Chris - * ltboxes.dtx: 0.1b \lrbox move \@endpefalse out of the inner - group + * ltboxes.dtx: 0.1b \lrbox move \@endpefalse out of the inner + group - * ltboxes.dtx: 0.1b \@irsbox fix typo + * ltboxes.dtx: 0.1b \@irsbox fix typo - * ltboxes.dtx: 0.1b \@iiiparbox \endgraf added due to extra group - in \@begin@tempboxa + * ltboxes.dtx: 0.1b \@iiiparbox \endgraf added due to extra group + in \@begin@tempboxa - * ltboxes.dtx: 0.1b \@begin@tempboxa Extra braces for color - support (braces removed from other macros) + * ltboxes.dtx: 0.1b \@begin@tempboxa Extra braces for color + support (braces removed from other macros) - * fontcmds.dtx: 2.1b "General" Macros \rm, \bf and \sf moved to - classes.dtx: + * fontcmds.dtx: 2.1b "General" Macros \rm, \bf and \sf moved to + classes.dtx: 1993-12-07 N.N. - * ltclass.dtx: 0.2m \@fileswithoptions Reset \CurrentOption + * ltclass.dtx: 0.2m \@fileswithoptions Reset \CurrentOption - * ltclass.dtx: 0.2l \ProvidesFile Macro added + * ltclass.dtx: 0.2l \ProvidesFile Macro added 1993-12-06 N.N. - * ltoutput.dtx: v1.0g \@topnewpage \@floatplacement placement bug - fixed + * ltoutput.dtx: v1.0g \@topnewpage \@floatplacement placement bug + fixed - * ltoutput.dtx: v1.0f \@specialoutput Unboxing of 255 added to - rescue writes + * ltoutput.dtx: v1.0f \@specialoutput Unboxing of 255 added to + rescue writes - * ltclass.dtx: 0.2k \ExecuteOptions Preserve \CurrentOption + * ltclass.dtx: 0.2k \ExecuteOptions Preserve \CurrentOption 1993-12-05 N.N. - * ltoutput.dtx: v1.0f \output Command changed + * ltoutput.dtx: v1.0f \output Command changed - * ltoutput.dtx: v1.0f @\getfpsbit Command added + * ltoutput.dtx: v1.0f @\getfpsbit Command added - * ltoutput.dtx: v1.0f @\boxfpsbit Command added + * ltoutput.dtx: v1.0f @\boxfpsbit Command added - * ltoutput.dtx: v1.0f \@topnewpage Commands changed + * ltoutput.dtx: v1.0f \@topnewpage Commands changed - * ltoutput.dtx: v1.0f \@textfloatsheight Commands added + * ltoutput.dtx: v1.0f \@textfloatsheight Commands added - * ltoutput.dtx: v1.0f \@testfp Command changed + * ltoutput.dtx: v1.0f \@testfp Command changed - * ltoutput.dtx: v1.0f \@testfp Command added + * ltoutput.dtx: v1.0f \@testfp Command added - * ltoutput.dtx: v1.0f \@startpagehook Hook added + * ltoutput.dtx: v1.0f \@startpagehook Hook added - * ltoutput.dtx: v1.0f \@startdblcolumn Command changed + * ltoutput.dtx: v1.0f \@startdblcolumn Command changed - * ltoutput.dtx: v1.0f \@startcolumn Command changed + * ltoutput.dtx: v1.0f \@startcolumn Command changed - * ltoutput.dtx: v1.0f \@shipoutsetup Command added + * ltoutput.dtx: v1.0f \@shipoutsetup Command added - * ltoutput.dtx: v1.0f \@setfpsbit Command added + * ltoutput.dtx: v1.0f \@setfpsbit Command added - * ltoutput.dtx: v1.0f \@setfloattypecounts Command added + * ltoutput.dtx: v1.0f \@setfloattypecounts Command added - * ltoutput.dtx: v1.0f \@resethfps Command added + * ltoutput.dtx: v1.0f \@resethfps Command added - * ltoutput.dtx: v1.0f \@outputpage Command changed + * ltoutput.dtx: v1.0f \@outputpage Command changed - * ltoutput.dtx: v1.0f \@opcol Hook added + * ltoutput.dtx: v1.0f \@opcol Hook added - * ltoutput.dtx: v1.0f \@opcol Command changed + * ltoutput.dtx: v1.0f \@opcol Command changed - * ltoutput.dtx: v1.0f \@fpsadddefault Command added + * ltoutput.dtx: v1.0f \@fpsadddefault Command added - * ltoutput.dtx: v1.0f \@flupdates Command added + * ltoutput.dtx: v1.0f \@flupdates Command added - * ltoutput.dtx: v1.0f \@flstop Commands added + * ltoutput.dtx: v1.0f \@flstop Commands added - * ltoutput.dtx: v1.0f \@flsettextmin Command added + * ltoutput.dtx: v1.0f \@flsettextmin Command added - * ltoutput.dtx: v1.0f \@flsetnum Command added + * ltoutput.dtx: v1.0f \@flsetnum Command added - * ltoutput.dtx: v1.0f \@flcheckspace Command added + * ltoutput.dtx: v1.0f \@flcheckspace Command added - * ltoutput.dtx: v1.0f \@addtotoporbot Command changed + * ltoutput.dtx: v1.0f \@addtotoporbot Command changed - * ltoutput.dtx: v1.0f \@addtonextcol Command changed + * ltoutput.dtx: v1.0f \@addtonextcol Command changed - * ltoutput.dtx: v1.0f \@addtodblcol Command changed + * ltoutput.dtx: v1.0f \@addtodblcol Command changed - * ltoutput.dtx: v1.0f \@addtocurcol Command changed + * ltoutput.dtx: v1.0f \@addtocurcol Command changed - * ltoutput.dtx: v1.0f \@addtobot Command changed + * ltoutput.dtx: v1.0f \@addtobot Command changed - * ltherest.dtx: LaTeX2e \@xfloat Command changed + * ltherest.dtx: LaTeX2e \@xfloat Command changed - * ltherest.dtx: LaTeX2e \@dblfloatplacement Command changed + * ltherest.dtx: LaTeX2e \@dblfloatplacement Command changed 1993-12-04 N.N. - * ltfiles.dtx: v0.9b \input Macro reimplemented + * ltfiles.dtx: v0.9b \input Macro reimplemented - * ltfiles.dtx: v0.9b \InputIfFileExists Macro added + * ltfiles.dtx: v0.9b \InputIfFileExists Macro added - * ltfiles.dtx: v0.9b \IfFileExists Macro added + * ltfiles.dtx: v0.9b \IfFileExists Macro added - * ltfiles.dtx: v0.9b \@input Macro reimplemented + * ltfiles.dtx: v0.9b \@input Macro reimplemented - * ltfiles.dtx: v0.9b \@iinput Macro reimplemented + * ltfiles.dtx: v0.9b \@iinput Macro reimplemented 1993-12-03 N.N. - * ltinit.dtx: v0.9b \@latexerr Set \c@errorcontextlines to -1 + * ltinit.dtx: v0.9b \@latexerr Set \c@errorcontextlines to -1 - * ltclass.dtx: 0.2i "General" \@onlypreamble: Many commands - declared. + * ltclass.dtx: 0.2i "General" \@onlypreamble: Many commands + declared. - * ltclass.dtx: 0.2i "General" Removed obsolete \@documentclass + * ltclass.dtx: 0.2i "General" Removed obsolete \@documentclass - * ltclass.dtx: 0.2i \@cls@pkg Name changed to avoid clash with - output routine. + * ltclass.dtx: 0.2i \@cls@pkg Name changed to avoid clash with + output routine. - * ltboxes.dtx: 0.1a \set@color macro added + * ltboxes.dtx: 0.1a \set@color macro added - * ltboxes.dtx: 0.1a \set@color color support + * ltboxes.dtx: 0.1a \set@color color support - * ltboxes.dtx: 0.1a \sbox extra group + * ltboxes.dtx: 0.1a \sbox extra group - * ltboxes.dtx: 0.1a \sbox color support + * ltboxes.dtx: 0.1a \sbox color support - * ltboxes.dtx: 0.1a \raisebox redefined to support \height + * ltboxes.dtx: 0.1a \raisebox redefined to support \height - * ltboxes.dtx: 0.1a \parbox Redefined to support extra optional - arguments + * ltboxes.dtx: 0.1a \parbox Redefined to support extra optional + arguments - * ltboxes.dtx: 0.1a \newsavebox Pass the whole of arg 1 to - \@ifdefinable + * ltboxes.dtx: 0.1a \newsavebox Pass the whole of arg 1 to + \@ifdefinable - * ltboxes.dtx: 0.1a \minipage Redefined to support extra optional - arguments + * ltboxes.dtx: 0.1a \minipage Redefined to support extra optional + arguments - * ltboxes.dtx: 0.1a \mbox extra group + * ltboxes.dtx: 0.1a \mbox extra group - * ltboxes.dtx: 0.1a \makebox modified + * ltboxes.dtx: 0.1a \makebox modified - * ltboxes.dtx: 0.1a \lrbox macro added + * ltboxes.dtx: 0.1a \lrbox macro added - * ltboxes.dtx: 0.1a \lrbox color support + * ltboxes.dtx: 0.1a \lrbox color support - * ltboxes.dtx: 0.1a \fbox extra group + * ltboxes.dtx: 0.1a \fbox extra group - * ltboxes.dtx: 0.1a \endlrbox macro added + * ltboxes.dtx: 0.1a \endlrbox macro added - * ltboxes.dtx: 0.1a \bm@b macros added + * ltboxes.dtx: 0.1a \bm@b macros added - * ltboxes.dtx: 0.1a \@savebox default c not x + * ltboxes.dtx: 0.1a \@savebox default c not x - * ltboxes.dtx: 0.1a \@makepicbox macro modified + * ltboxes.dtx: 0.1a \@makepicbox macro modified - * ltboxes.dtx: 0.1a \@makebox default changed from x to c + * ltboxes.dtx: 0.1a \@makebox default changed from x to c - * ltboxes.dtx: 0.1a \@isavepicbox extra group + * ltboxes.dtx: 0.1a \@isavepicbox extra group - * ltboxes.dtx: 0.1a \@isavebox extra group + * ltboxes.dtx: 0.1a \@isavebox extra group - * ltboxes.dtx: 0.1a \@isavebox color support + * ltboxes.dtx: 0.1a \@isavebox color support - * ltboxes.dtx: 0.1a \@irsbox redefined to support \height + * ltboxes.dtx: 0.1a \@irsbox redefined to support \height - * ltboxes.dtx: 0.1a \@imakebox macro modified + * ltboxes.dtx: 0.1a \@imakebox macro modified - * ltboxes.dtx: 0.1a \@iirsbox redefined to support \height + * ltboxes.dtx: 0.1a \@iirsbox redefined to support \height - * ltboxes.dtx: 0.1a \@end@tempboxa macro added + * ltboxes.dtx: 0.1a \@end@tempboxa macro added - * ltboxes.dtx: 0.1a \@begin@tempboxa macro added + * ltboxes.dtx: 0.1a \@begin@tempboxa macro added - * ltboxes.dtx: 0.1a \@argrsbox macro removed + * ltboxes.dtx: 0.1a \@argrsbox macro removed 1993-12-01 N.N. - * ltoutput.dtx: v1.0e \@reinserts Command added + * ltoutput.dtx: v1.0e \@reinserts Command added 1993-11-30 N.N. - * ltoutput.dtx: v1.0c \@tracemessage Commands added + * ltoutput.dtx: v1.0c \@tracemessage Commands added - * ltmiscen.dtx: LaTeX2e \eqnarray initialised everycr to {} + * ltmiscen.dtx: LaTeX2e \eqnarray initialised everycr to {} 1993-11-29 N.N. - * ltplain.dtx: ??? "General" All accents in decimals; suggested - by Paul Taylor + * ltplain.dtx: ??? "General" All accents in decimals; suggested + by Paul Taylor - * ltoutput.dtx: v1.0b \@makespecialcolbox Command added + * ltoutput.dtx: v1.0b \@makespecialcolbox Command added - * ltoutput.dtx: v1.0b \@makecol \@makespecialcolbox added + * ltoutput.dtx: v1.0b \@makecol \@makespecialcolbox added 1993-11-28 N.N. - * ltclass.dtx: 0.2h \endfilecontents Don't globally allocate a - write stream (always use 15) + * ltclass.dtx: 0.2h \endfilecontents Don't globally allocate a + write stream (always use 15) - * ltclass.dtx: 0.2h "General" Primitive filenames now terminated - by space not \relax. + * ltclass.dtx: 0.2h "General" Primitive filenames now terminated + by space not \relax. - * ltclass.dtx: 0.2h "General" Directory syntax checing moved to - dircheck.dtx: + * ltclass.dtx: 0.2h "General" Directory syntax checing moved to + dircheck.dtx: - * ltclass.dtx: 0.2h "General" Assorted commands now in the kernel - removed. + * ltclass.dtx: 0.2h "General" Assorted commands now in the kernel + removed. - * ltclass.dtx: 0.2h \@twoclasseserror Macro added + * ltclass.dtx: 0.2h \@twoclasseserror Macro added - * ltclass.dtx: 0.2h \@missingfileerror Use filename parser from - dircheck + * ltclass.dtx: 0.2h \@missingfileerror Use filename parser from + dircheck 1993-11-24 N.N. - * ltinit.dtx: LaTeX2e \P@LaTeX Macro changed + * ltinit.dtx: LaTeX2e \P@LaTeX Macro changed - * fontcmds.dtx: v2.1a \test@next Macro added + * fontcmds.dtx: v2.1a \test@next Macro added - * fontcmds.dtx: v2.1a \maybe@ic@ Use \test@next + * fontcmds.dtx: v2.1a \maybe@ic@ Use \test@next 1993-11-23 N.N. - * ltoutput.dtx: v0.1c \enlargethispage* Commands added + * ltoutput.dtx: v0.1c \enlargethispage* Commands added - * ltoutput.dtx: v0.1c \@specialoutput Command changed + * ltoutput.dtx: v0.1c \@specialoutput Command changed - * ltoutput.dtx: v0.1c \@makecol Command changed + * ltoutput.dtx: v0.1c \@makecol Command changed - * ltoutput.dtx: v0.1c \@kludgeins Insert added + * ltoutput.dtx: v0.1c \@kludgeins Insert added - * ltoutput.dtx: v0.1c \@enlargepage Command added + * ltoutput.dtx: v0.1c \@enlargepage Command added - * ltoutput.dtx: v0.1a \paperwidth Register added + * ltoutput.dtx: v0.1a \paperwidth Register added - * ltoutput.dtx: v0.1a \paperheight Register added + * ltoutput.dtx: v0.1a \paperheight Register added - * ltinit.dtx: LaTeX2e \two@digits Macro added + * ltinit.dtx: LaTeX2e \two@digits Macro added - * ltinit.dtx: LaTeX2e \renewenvironment Macro reimplemented and - extended + * ltinit.dtx: LaTeX2e \renewenvironment Macro reimplemented and + extended - * ltinit.dtx: LaTeX2e \renewcommand Macro reimplemented and - extended + * ltinit.dtx: LaTeX2e \renewcommand Macro reimplemented and + extended - * ltinit.dtx: LaTeX2e \newcommand Macro reimplemented and - extended + * ltinit.dtx: LaTeX2e \newcommand Macro reimplemented and + extended - * ltinit.dtx: LaTeX2e "General" replaced plus by \@plus if - appropriate + * ltinit.dtx: LaTeX2e "General" replaced plus by \@plus if + appropriate - * ltinit.dtx: LaTeX2e \@yargdef Macro interface changed + * ltinit.dtx: LaTeX2e \@yargdef Macro interface changed - * ltinit.dtx: LaTeX2e \@yargdef Avoid \@?@? token + * ltinit.dtx: LaTeX2e \@yargdef Avoid \@?@? token - * ltinit.dtx: LaTeX2e \@xargdef Macro interface changed + * ltinit.dtx: LaTeX2e \@xargdef Macro interface changed - * ltinit.dtx: LaTeX2e \@xargdef Macro added + * ltinit.dtx: LaTeX2e \@xargdef Macro added - * ltinit.dtx: LaTeX2e \@newenv Macro interface changed + * ltinit.dtx: LaTeX2e \@newenv Macro interface changed - * ltinit.dtx: LaTeX2e \@newcommand Macro added + * ltinit.dtx: LaTeX2e \@newcommand Macro added - * ltinit.dtx: LaTeX2e \@ifundefined Redefined to remove a - trailing \fi + * ltinit.dtx: LaTeX2e \@ifundefined Redefined to remove a + trailing \fi - * ltclass.dtx: 0.2g "General" Warnings and errors now directly - coded. + * ltclass.dtx: 0.2g "General" Warnings and errors now directly + coded. - * ltclass.dtx: 0.2g "General" Various macros now moved to - latex.tex. + * ltclass.dtx: 0.2g "General" Various macros now moved to + latex.tex. - * ltclass.dtx: 0.2g \@use@ption Name changed from \@executeoption + * ltclass.dtx: 0.2g \@use@ption Name changed from \@executeoption 1993-11-22 N.N. - * ltinit.dtx: LaTeX2e \providecommand Macro added + * ltinit.dtx: LaTeX2e \providecommand Macro added - * ltinit.dtx: LaTeX2e \c@errorcontextlines Macro added + * ltinit.dtx: LaTeX2e \c@errorcontextlines Macro added - * ltinit.dtx: LaTeX2e \LaTeXe Macro added + * ltinit.dtx: LaTeX2e \LaTeXe Macro added - * ltinit.dtx: LaTeX2e \@plus Macro added + * ltinit.dtx: LaTeX2e \@plus Macro added - * ltinit.dtx: LaTeX2e \@minus Macro added + * ltinit.dtx: LaTeX2e \@minus Macro added - * ltinit.dtx: LaTeX2e \@checkcommand Macro added + * ltinit.dtx: LaTeX2e \@checkcommand Macro added - * ltherest.dtx: LaTeX2e \settoheight Macro added + * ltherest.dtx: LaTeX2e \settoheight Macro added - * ltherest.dtx: LaTeX2e \settodepth Macro added + * ltherest.dtx: LaTeX2e \settodepth Macro added - * ltherest.dtx: LaTeX2e \@settopoint Macro added + * ltherest.dtx: LaTeX2e \@settopoint Macro added - * ltherest.dtx: LaTeX2e \@settodim Macro added + * ltherest.dtx: LaTeX2e \@settodim Macro added - * ltclass.dtx: 0.2f \listfiles Removed checking for - \@unknownversion + * ltclass.dtx: 0.2f \listfiles Removed checking for + \@unknownversion - * ltclass.dtx: 0.2f \@unknownversion Macro removed + * ltclass.dtx: 0.2f \@unknownversion Macro removed - * ltclass.dtx: 0.2f \@ifclasslater Added //00 so parsing never - produces a runaway argument. + * ltclass.dtx: 0.2f \@ifclasslater Added //00 so parsing never + produces a runaway argument. - * ltclass.dtx: 0.2f \@fileswithoptions Made the initial version - [] not [\@unknownversion] + * ltclass.dtx: 0.2f \@fileswithoptions Made the initial version + [] not [\@unknownversion] - * ltclass.dtx: 0.2f \@fileswithoptions Made the default [] not - [\@unknownversion] + * ltclass.dtx: 0.2f \@fileswithoptions Made the default [] not + [\@unknownversion] 1993-11-21 N.N. - * ltmiscen.dtx: v0.9a \verbatim@font Macro added + * ltmiscen.dtx: v0.9a \verbatim@font Macro added - * ltmiscen.dtx: v0.9a \verb use \verbatim@font instead of \tt + * ltmiscen.dtx: v0.9a \verb use \verbatim@font instead of \tt 1993-11-21 N.N. - * ltmiscen.dtx: v0.9a \@verbatim use \verbatim@font instead of - \tt + * ltmiscen.dtx: v0.9a \@verbatim use \verbatim@font instead of + \tt - * ltinit.dtx: LaTeX2e "General" replaced \tt by \ttfamily if - appropriate + * ltinit.dtx: LaTeX2e "General" replaced \tt by \ttfamily if + appropriate - * ltinit.dtx: LaTeX2e "General" replaced \sf by \sffamily if - appropriate + * ltinit.dtx: LaTeX2e "General" replaced \sf by \sffamily if + appropriate - * ltinit.dtx: LaTeX2e "General" replaced \sc by \scshape if - appropriate + * ltinit.dtx: LaTeX2e "General" replaced \sc by \scshape if + appropriate - * ltinit.dtx: LaTeX2e "General" replaced \rm by \rmfamily if - appropriate + * ltinit.dtx: LaTeX2e "General" replaced \rm by \rmfamily if + appropriate - * ltinit.dtx: LaTeX2e "General" replaced \it by \itshape if - appropriate + * ltinit.dtx: LaTeX2e "General" replaced \it by \itshape if + appropriate - * ltinit.dtx: LaTeX2e "General" replaced \bf by \bfseries if - appropriate + * ltinit.dtx: LaTeX2e "General" replaced \bf by \bfseries if + appropriate - * ltclass.dtx: 0.2e \@missingfileerror Stop infinite looping on - \@er@ext + * ltclass.dtx: 0.2e \@missingfileerror Stop infinite looping on + \@er@ext 1993-11-18 N.N. - * ltclass.dtx: 0.2d \documentstyle Modified \RequirePackage stuff. + * ltclass.dtx: 0.2d \documentstyle Modified \RequirePackage stuff. - * ltclass.dtx: 0.2d \NeedsTeXFormat \fmtname \fmtversion not - \@\pldots + * ltclass.dtx: 0.2d \NeedsTeXFormat \fmtname \fmtversion not + \@\pldots - * ltclass.dtx: 0.2d \ExecuteOptions Use \CurrentOption not \@tempa + * ltclass.dtx: 0.2d \ExecuteOptions Use \CurrentOption not \@tempa 1993-11-17 N.N. - * ltclass.dtx: 0.2c \ProcessOptions* restoring \@fileswith@pti@ns - added. + * ltclass.dtx: 0.2c \ProcessOptions* restoring \@fileswith@pti@ns + added. - * ltclass.dtx: 0.2c \NeedsTeXFormat Name changed from - \NeedsFormat + * ltclass.dtx: 0.2c \NeedsTeXFormat Name changed from + \NeedsFormat - * ltclass.dtx: 0.2c \DeclareOption* Error checking added + * ltclass.dtx: 0.2c \DeclareOption* Error checking added - * ltclass.dtx: 0.2c \CurrentOption Name changed from \@curroption + * ltclass.dtx: 0.2c \CurrentOption Name changed from \@curroption - * ltclass.dtx: 0.2c \@twoloadclasserror Macro added + * ltclass.dtx: 0.2c \@twoloadclasserror Macro added - * ltclass.dtx: 0.2c \@fileswithoptions Added trap for two - \LoadClass commands. + * ltclass.dtx: 0.2c \@fileswithoptions Added trap for two + \LoadClass commands. - * ltclass.dtx: 0.2c \@badrequireerror Macro added + * ltclass.dtx: 0.2c \@badrequireerror Macro added - * ltclass.dtx: 0.2c \@@fileswith@pti@ns Macro added + * ltclass.dtx: 0.2c \@@fileswith@pti@ns Macro added 1993-11-15 N.N. - * ltclass.dtx: 0.2b \documentstyle Modified to match - \ProcessOption* + * ltclass.dtx: 0.2b \documentstyle Modified to match + \ProcessOption* - * ltclass.dtx: 0.2b \ProcessOptions* Star form added. + * ltclass.dtx: 0.2b \ProcessOptions* Star form added. 1993-11-14 N.N. - * ltclass.dtx: 0.2a \g@addto@macro Made global + * ltclass.dtx: 0.2a \g@addto@macro Made global - * ltclass.dtx: 0.2a \documentstyle Added \RequirePackage - \@unusedoptionlist stuff. + * ltclass.dtx: 0.2a \documentstyle Added \RequirePackage + \@unusedoptionlist stuff. - * ltclass.dtx: 0.2a \ProcessOptions* Stop adding the global - option list inside class files. + * ltclass.dtx: 0.2a \ProcessOptions* Stop adding the global + option list inside class files. - * ltclass.dtx: 0.2a \ProcessOptions* Optimise `empty option' - code. + * ltclass.dtx: 0.2a \ProcessOptions* Optimise `empty option' + code. - * ltclass.dtx: 0.2a \NeedsTeXFormat made more robust for - alternative syntax for other formats. + * ltclass.dtx: 0.2a \NeedsTeXFormat made more robust for + alternative syntax for other formats. - * ltclass.dtx: 0.2a \AtEndDocument Included extension in the - generated macro name for package and class hooks. + * ltclass.dtx: 0.2a \AtEndDocument Included extension in the + generated macro name for package and class hooks. - * ltclass.dtx: 0.2a \@reset@ptions macro added + * ltclass.dtx: 0.2a \@reset@ptions macro added - * ltclass.dtx: 0.2a \@fileswithoptions Moved reseting of - \default@ds, \ds@ and \@declaredoptions here, from the end of - \ProcessOptions. + * ltclass.dtx: 0.2a \@fileswithoptions Moved reseting of + \default@ds, \ds@ and \@declaredoptions here, from the end of + \ProcessOptions. - * ltclass.dtx: 0.2a \@currext Name changed from \@currextension + * ltclass.dtx: 0.2a \@currext Name changed from \@currextension 1993-11-03 Rainer Schoepf - * ltpictur.dtx: LaTeX2.09 "General" (RmS) changed \halign to - \ialignto initialize \tabskip and \everycr + * ltpictur.dtx: LaTeX2.09 "General" (RmS) changed \halign to + \ialignto initialize \tabskip and \everycr 1993-09-08 N.N. - * ltmiscen.dtx: LaTeX2.09 \enddocument Added warning in case of - undefined references. + * ltmiscen.dtx: LaTeX2.09 \enddocument Added warning in case of + undefined references. 1993-09-07 N.N. - * ltmiscen.dtx: LaTeX2.09 Changed definition of \verb so that - it detects a missing second delimiter. + * ltmiscen.dtx: LaTeX2.09 Changed definition of \verb so that + it detects a missing second delimiter. 1993-09-03 N.N. - * ltmiscen.dtx: LaTeX2.09 \verbatim@nolig@list Replaced \@noligs - by extensible list + * ltmiscen.dtx: LaTeX2.09 \verbatim@nolig@list Replaced \@noligs + by extensible list 1993-08-05 Rainer Schoepf - * ltherest.dtx: LaTeX2.09 \@sect (RmS) Made sure that - \protectworks correctly in expansion of \the + * ltherest.dtx: LaTeX2.09 \@sect (RmS) Made sure that + \protectworks correctly in expansion of \the 1993-08-03 N.N. - * ltmiscen.dtx: LaTeX2.09 \enddocument Changed redefinition of - \global to redefinition of \@setckpt. + * ltmiscen.dtx: LaTeX2.09 \enddocument Changed redefinition of + \global to redefinition of \@setckpt. 1993-05-05 N.N. - * fontcmds.dtx: v2.0b "General" Removed all LaTeX related cmds + * fontcmds.dtx: v2.0b "General" Removed all LaTeX related cmds 1992-11-26 Rainer Schoepf - * ltherest.dtx: LaTeX2.09 \footnote (RmS) Changed all to - \def\protect{\noexpand\protect\noexpand} + * ltherest.dtx: LaTeX2.09 \footnote (RmS) Changed all to + \def\protect{\noexpand\protect\noexpand} - * ltherest.dtx: LaTeX2.09 \@footnotetext (RmS) added protection - for \edef + * ltherest.dtx: LaTeX2.09 \@footnotetext (RmS) added protection + for \edef - * ltboxes.dtx: LaTeX2.09 \@mpfootnotetext (RmS) added protection - for \edef + * ltboxes.dtx: LaTeX2.09 \@mpfootnotetext (RmS) added protection + for \edef 1992-08-25 Frank Mittelbach - * ltherest.dtx: LaTeX2.09 \@sect (FMi) replaced explicit setting - of \@svsec by call to \@seccntformat + * ltherest.dtx: LaTeX2.09 \@sect (FMi) replaced explicit setting + of \@svsec by call to \@seccntformat 1992-08-24 N.N. - * ltmiscen.dtx: LaTeX2.09 \verb Changed \verband \@sverb to work - correctly in math mode + * ltmiscen.dtx: LaTeX2.09 \verb Changed \verband \@sverb to work + correctly in math mode - * ltinit.dtx: LaTeX2.09 \@ifnextchar Changed so first argument - can be `='. + * ltinit.dtx: LaTeX2.09 \@ifnextchar Changed so first argument + can be `='. 1992-08-19 Rainer Schoepf - * ltherest.dtx: LaTeX2.09 \@othm (RmS) Changed error message to - complain about undefined counter + * ltherest.dtx: LaTeX2.09 \@othm (RmS) Changed error message to + complain about undefined counter 1992-03-18 Rainer Schoepf - * ltherest.dtx: LaTeX2.09 \end@float (RmS) changed \@esphack to - \@Esphack + * ltherest.dtx: LaTeX2.09 \end@float (RmS) changed \@esphack to + \@Esphack - * ltherest.dtx: LaTeX2.09 \@xympar (RmS) added - \global\@ignorefalse + * ltherest.dtx: LaTeX2.09 \@xympar (RmS) added + \global\@ignorefalse 1992-01-10 Rainer Schoepf - * ltherest.dtx: LaTeX2.09 \@othm (RmS) Check for existence of - theorem environment + * ltherest.dtx: LaTeX2.09 \@othm (RmS) Check for existence of + theorem environment 1991-11-22 Rainer Schoepf - * ltlists.dtx: LaTeX2.09 \@item (RmS) Changed second call to - \makelabelto \unhbox\@tempboxa. Avoids problems with side - effects in \makelabeland is more efficient. + * ltlists.dtx: LaTeX2.09 \@item (RmS) Changed second call to + \makelabelto \unhbox\@tempboxa. Avoids problems with side + effects in \makelabeland is more efficient. - * ltherest.dtx: LaTeX2.09 \footnote (RmS) Added - \let\protect\noexpandin \@xfootnote, \@xfootnotemark, and - \@xfootnotetext + * ltherest.dtx: LaTeX2.09 \footnote (RmS) Added + \let\protect\noexpandin \@xfootnote, \@xfootnotemark, and + \@xfootnotetext 1991-11-06 Rainer Schoepf - * ltherest.dtx: LaTeX2.09 \end@float (RmS) added warning message - perhaps we should use an error message + * ltherest.dtx: LaTeX2.09 \end@float (RmS) added warning message + perhaps we should use an error message 1991-11-04 Rainer Schoepf - * ltlists.dtx: LaTeX2.09 \makelabel (RmS) added default - definition for \makelabel, to produce an error message. + * ltlists.dtx: LaTeX2.09 \makelabel (RmS) added default + definition for \makelabel, to produce an error message. 1991-11-01 Rainer Schoepf - * ltherest.dtx: LaTeX2.09 \footnote (RmS) Added - \let\protect\noexpandin \footnote, \footnotemark, and - \footnotetext, since \xdef is used + * ltherest.dtx: LaTeX2.09 \footnote (RmS) Added + \let\protect\noexpandin \footnote, \footnotemark, and + \footnotetext, since \xdef is used 1991-10-17 Rainer Schoepf - * ltinit.dtx: LaTeX209 \@tfor (Rms) \xdef replaced by \def (See - FMi's array.doc) + * ltinit.dtx: LaTeX209 \@tfor (Rms) \xdef replaced by \def (See + FMi's array.doc) 1991-09-29 Rainer Schoepf - * ltherest.dtx: LaTeX2.09 \@footnotetext (RmS) added \reset@font + * ltherest.dtx: LaTeX2.09 \@footnotetext (RmS) added \reset@font - * ltherest.dtx: LaTeX2.09 \@dottedtocline (RmS) added - \reset@font for page number + * ltherest.dtx: LaTeX2.09 \@dottedtocline (RmS) added + \reset@font for page number - * ltboxes.dtx: LaTeX2.09 \@mpfootnotetext (RmS) added - \reset@font + * ltboxes.dtx: LaTeX2.09 \@mpfootnotetext (RmS) added + \reset@font 1991-08-26 N.N. - * ltmiscen.dtx: LaTeX2.09 \@verbatim \@@par added + * ltmiscen.dtx: LaTeX2.09 \@verbatim \@@par added 1991-08-14 Rainer Schoepf - * ltplain.dtx: LaTeX2.09 \cases (RmS) inserted extra braces - around entry for NFSS + * ltplain.dtx: LaTeX2.09 \cases (RmS) inserted extra braces + around entry for NFSS - * ltpictur.dtx: LaTeX2.09 "General" (RmS) inserted extra braces - around entry for NFSS + * ltpictur.dtx: LaTeX2.09 "General" (RmS) inserted extra braces + around entry for NFSS - * ltherest.dtx: LaTeX2.09 \@endtheorem Moved \itshapeafter \item - to make it work with NFSS + * ltherest.dtx: LaTeX2.09 \@endtheorem Moved \itshapeafter \item + to make it work with NFSS 1991-07-24 N.N. - * ltmiscen.dtx: LaTeX2.09 \@verbatim Added - \penalty\interlinepenalty to definition of \par so that - \samepage works + * ltmiscen.dtx: LaTeX2.09 \@verbatim Added + \penalty\interlinepenalty to definition of \par so that + \samepage works diff --git a/macros/latex/base/classes.dtx b/macros/latex/base/classes.dtx index 857cfc799e..188679d4d9 100644 --- a/macros/latex/base/classes.dtx +++ b/macros/latex/base/classes.dtx @@ -53,7 +53,7 @@ %<*driver> \ProvidesFile{classes.drv} % - [2021/10/04 v1.4n + [2022/07/02 v1.4n % Standard LaTeX document class] %<10pt|11pt|12pt> Standard LaTeX file (size option)] % \end{macrocode} @@ -2538,7 +2538,7 @@ % The macro above uses |\@makechapterhead|\meta{text} to format the % heading of the chapter. % -% We begin by leaving some white space. The we open a group in +% We begin by leaving some white space. Then we open a group in % which we have a paragraph indent of 0pt, and in which we have the % text set ragged right. We also reset the font. % \changes{v1.3c}{1995/05/25}{replace \cs{reset@font} with diff --git a/macros/latex/base/classes.pdf b/macros/latex/base/classes.pdf index f4e8a51d5b..6df3b9b2eb 100644 Binary files a/macros/latex/base/classes.pdf and b/macros/latex/base/classes.pdf differ diff --git a/macros/latex/base/clsguide.pdf b/macros/latex/base/clsguide.pdf index c86a168e45..c9f85a5f52 100644 Binary files a/macros/latex/base/clsguide.pdf and b/macros/latex/base/clsguide.pdf differ diff --git a/macros/latex/base/clsguide.tex b/macros/latex/base/clsguide.tex index 6f4d1cf027..0ed5e60817 100644 --- a/macros/latex/base/clsguide.tex +++ b/macros/latex/base/clsguide.tex @@ -35,7 +35,12 @@ \title{\LaTeXe~for class and package writers} \author{Copyright \copyright~1995--2006 The \LaTeX\ Project\\ - All rights reserved} + All rights reserved.% + \footnote{This file may distributed and/or modified under the + conditions of the \LaTeX{} Project Public License, either version 1.3c + of this license or (at your option) any later version. See the source + \texttt{clsguide.tex} for full details.}% +} \date{15 February 2006} diff --git a/macros/latex/base/cmfonts.fdd b/macros/latex/base/cmfonts.fdd index f991ee564e..477085eaef 100644 --- a/macros/latex/base/cmfonts.fdd +++ b/macros/latex/base/cmfonts.fdd @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% Copyright 1993-2019 +% Copyright 1993-2022 % The LaTeX Project and any individual authors listed elsewhere % in this file. % @@ -67,7 +67,7 @@ %<*driver, > \ProvidesFile{cmfonts.drv} % - [2019/12/16 v2.5j Standard LaTeX font definitions] + [2022/07/10 v2.5l Standard LaTeX font definitions] % %<*driver> \documentclass{ltxdoc} @@ -261,13 +261,13 @@ % (thanks to Christian Cornelssen)} % \begin{macrocode} %<*new|ec> -%<*!tt> +%<*!tt&!T1cmss> \providecommand{\EC@family}[5]{% \DeclareFontShape{#1}{#2}{#3}{#4}% {<5><6><7><8><9><10><10.95><12><14.4>% % <17.28><20.74><24.88><29.86><35.83>genb*#5}{}} % <17.28><20.74><24.88>genb*#5}{}} -% +% % \end{macrocode} % For monospaced fonts, the normal interpolation breaks down below % 8pt, so scale the 8pt fonts instead. @@ -282,6 +282,21 @@ % <35.83>genb*#5}{}} % <9><10><10.95><12><14.4><17.28><20.74><24.88>genb*#5}{}} % +% \end{macrocode} +% \changes{v2.5l}{2022/07/10}% +% {Avoid ec ss fonts at design size 5, 6, 7. gh/879} +% For ec cmss fonts avoid the small design sizes which have incorrect +% definitions. +% (Medium weight bolder and wider than bold extended for 5pt and 6pt, +% 7pt does not have expected contrast. Scale 8pt, matching |fix-cm|). +% gh/879 +% \begin{macrocode} +%<*T1cmss> +\providecommand{\EC@ssfamily}[5]{% + \DeclareFontShape{#1}{#2}{#3}{#4}% + {<5><6><7><8>#50800% + <9><10><10.95><12><14.4><17.28><20.74><24.88><29.86><35.83>genb*#5}{}} +% % % \end{macrocode} % @@ -375,6 +390,8 @@ % \changes{v2.5a}{1997/01/14} % {EC fonts} % \changes{v2.5d}{1997/06/02}{bold sc fonts latex/2497} +% \changes{v2.5k}{2022/06/10}{add support for slanted small caps github/782} +% % \begin{macrocode} %<*ec> \EC@family{T1}{cmr}{m}{n}{ecrm} @@ -387,6 +404,9 @@ \EC@family{T1}{cmr}{bx}{sl}{ecbl} \EC@family{T1}{cmr}{bx}{sc}{ecxc} \EC@family{T1}{cmr}{m}{ui}{ecui} +\EC@family{T1}{cmr}{m}{scsl}{ecsc} +\EC@family{T1}{cmr}{bx}{scsl}{ecoc} +\EC@family{T1}{cmr}{b}{scsl}{ecoc} % % % \end{macrocode} @@ -489,12 +509,12 @@ % {EC fonts} % \begin{macrocode} %<*ec> -\EC@family{T1}{cmss}{m}{n}{ecss} -\EC@family{T1}{cmss}{m}{sl}{ecsi} -\EC@family{T1}{cmss}{m}{it}{ecsi} -\EC@family{T1}{cmss}{bx}{n}{ecsx} -\EC@family{T1}{cmss}{bx}{it}{ecso} -\EC@family{T1}{cmss}{bx}{sl}{ecso} +\EC@ssfamily{T1}{cmss}{m}{n}{ecss} +\EC@ssfamily{T1}{cmss}{m}{sl}{ecsi} +\EC@ssfamily{T1}{cmss}{m}{it}{ecsi} +\EC@ssfamily{T1}{cmss}{bx}{n}{ecsx} +\EC@ssfamily{T1}{cmss}{bx}{it}{ecso} +\EC@ssfamily{T1}{cmss}{bx}{sl}{ecso} % % \end{macrocode} % The next substitution is very questionable. diff --git a/macros/latex/base/cmfonts.pdf b/macros/latex/base/cmfonts.pdf index 708ec8a389..5eda3d0e00 100644 Binary files a/macros/latex/base/cmfonts.pdf and b/macros/latex/base/cmfonts.pdf differ diff --git a/macros/latex/base/cyrguide.pdf b/macros/latex/base/cyrguide.pdf index ee3a68232b..e7ac0140e4 100644 Binary files a/macros/latex/base/cyrguide.pdf and b/macros/latex/base/cyrguide.pdf differ diff --git a/macros/latex/base/cyrguide.tex b/macros/latex/base/cyrguide.tex index 3b16687f39..7304a586e4 100644 --- a/macros/latex/base/cyrguide.tex +++ b/macros/latex/base/cyrguide.tex @@ -33,7 +33,12 @@ \title{Cyrillic languages support in \LaTeX} \author{\copyright~Copyright 1998--1999,\\ Vladimir Volovich, - Werner Lemberg and \LaTeX\ Project Team.\\ All rights reserved.} + Werner Lemberg and \LaTeX\ Project Team.\\ All rights reserved.% + \footnote{This file may distributed and/or modified under the + conditions of the \LaTeX{} Project Public License, either version 1.3c + of this license or (at your option) any later version. See the source + \texttt{cyrguide.tex} for full details.}% +} \date{12 March 1999} diff --git a/macros/latex/base/doc-code.pdf b/macros/latex/base/doc-code.pdf index 681bc85143..01ad1c42bb 100644 Binary files a/macros/latex/base/doc-code.pdf and b/macros/latex/base/doc-code.pdf differ diff --git a/macros/latex/base/doc.dtx b/macros/latex/base/doc.dtx index d6b21744df..d137038d63 100644 --- a/macros/latex/base/doc.dtx +++ b/macros/latex/base/doc.dtx @@ -45,7 +45,7 @@ %<+package> %<+package>\ProvidesPackage{doc} %<+shortvrb>\ProvidesPackage{shortvrb} -%<+package|shortvrb> [2022/06/08 v3.0j +%<+package|shortvrb> [2022/07/03 v3.0k %<+package|shortvrb> Standard LaTeX documentation package V3 (FMi)] %\catcode`\<=12 % @@ -260,8 +260,8 @@ % \begin{abstract} % Roughly 30 years ago (version 1.0 was dated 1988/05/05) I wrote % the first version of the \DOC package, a package to provide code -% documentation for \TeX{} code. Since then it has be used all over -% the place to document the \LaTeX{} kernel and most of the +% documentation for \TeX{} code. Since then it has been used all +% over the place to document the \LaTeX{} kernel and most of the % packages that are nowadays available. The core code of version 2 % (which is the current version) exists since 1998, i.e., for 20 % years. @@ -1909,112 +1909,38 @@ % should be altered further. % \fmi{cleanup replacement of kvoptions} % -% \begin{macrocode} -\ExplSyntaxOn -% \end{macrocode} % Some keys are available as options for use in \cs{usepackage} some are % for the generated item \api's: -% \fmi{cleanup documentation (and code once the new key interface is there)} -% \begin{macrocode} -\newif \ifdoc@noprint -\newif \ifdoc@noindex -\newif \ifdoc@hyperref \doc@hyperreftrue -\newif \ifdoc@multicol \doc@multicoltrue -\newif \ifdoc@debugshow -\newif \ifdoc@reportchangedates -\keys_define:nn {doc} - { - noprint .choice:, - noprint / true .code:n = { \legacy_if_set_true:n { doc@noprint } }, - noprint / false .code:n = { \legacy_if_set_false:n { doc@noprint } }, - noprint .default:n = { true }, - noindex .choice:, - noindex / true .code:n = { \legacy_if_set_true:n { doc@noindex } }, - noindex / false .code:n = { \legacy_if_set_false:n { doc@noindex } }, - noindex .default:n = { true }, - hyperref .choice:, - hyperref / true .code:n = { \legacy_if_set_true:n { doc@hyperref } }, - hyperref / false .code:n = { \legacy_if_set_false:n { doc@hyperref } }, - hyperref .default:n = { true }, -% \end{macrocode} +% \changes{v3.0k}{2022/06/22}{Use \cs{DeclareKeys}} % \changes{v3.0h}{2022/06/01}{fix choice key name (gh/750)} -% \begin{macrocode} - nohyperref .choice:, - nohyperref / true .code:n = { \legacy_if_set_false:n { doc@hyperref } }, - nohyperref / false .code:n = { \legacy_if_set_true:n { doc@hyperref } }, - nohyperref .default:n = { true }, - multicol .choice:, - multicol / true .code:n = { \legacy_if_set_true:n { doc@multicol } }, - multicol / false .code:n = { \legacy_if_set_false:n { doc@multicol } }, - multicol .default:n = { true }, - nomulticol .choice:, - nomulticol / true .code:n = { \legacy_if_set_false:n { doc@multicol } }, - nomulticol / false .code:n = { \legacy_if_set_true:n { doc@multicol } }, -% \end{macrocode} % \changes{v3.0h}{2022/06/01}{fix default key name (gh/750)} % \begin{macrocode} - nomulticol .default:n = { true }, - debugshow .choice:, - debugshow / true .code:n = { \legacy_if_set_true:n { doc@debugshow } }, - debugshow / false .code:n = { \legacy_if_set_false:n { doc@debugshow } }, - debugshow .default:n = { true }, - reportchangedates .choice:, - reportchangedates / true .code:n = { \legacy_if_set_true:n { doc@reportchangedates } }, - reportchangedates / false .code:n = { \legacy_if_set_false:n { doc@reportchangedates } }, - reportchangedates .default:n = { true }, - } -% \end{macrocode} -% This one is for \cs{usepackage} and \cs{NewDocElement}: -% \begin{macrocode} -\newif \ifdoc@toplevel \doc@topleveltrue -\keys_define:nn {doc} +\DeclareKeys { - toplevel .choice:, - toplevel / true .code:n = { \legacy_if_set_true:n { doc@toplevel } }, - toplevel / false .code:n = { \legacy_if_set_false:n { doc@toplevel } }, - toplevel .default:n = { true }, - notoplevel .choice:, - notoplevel / true .code:n = { \legacy_if_set_false:n { doc@toplevel } }, - notoplevel / false .code:n = { \legacy_if_set_true:n { doc@toplevel } }, - notoplevel .default:n = { true } + noprint .if = {doc@noprint}, + noindex .if = {doc@noindex}, + hyperref .if = {doc@hyperref}, + nohyperref .ifnot = {doc@hyperref}, + multicol .if = {doc@multicol}, + nomulticol .ifnot = {doc@multicol}, + debugshow .if = {doc@debugshow}, + reportchangedates .if = {doc@reportchangedates}, + toplevel .if = {doc@toplevel}, + notoplevel .ifnot = {doc@toplevel}, + macrolike .if = {doc@macrolike}, + envlike .ifnot = {doc@macrolike}, + idxtype .store = \doc@idxtype, + idxgroup .store = \doc@idxgroup, + printtype .store = \doc@printtype, + outer .if = {doc@outer}, } % \end{macrocode} -% These are for \cs{NewDocElement}: -% \begin{macrocode} -\newif \ifdoc@macrolike -\keys_define:nn {doc} - { - macrolike .choice:, - macrolike / true .code:n = { \legacy_if_set_true:n { doc@macrolike } }, - macrolike / false .code:n = { \legacy_if_set_false:n { doc@macrolike } }, - macrolike .default:n = { true }, - envlike .choice:, - envlike / true .code:n = { \legacy_if_set_false:n { doc@macrolike } }, - envlike / false .code:n = { \legacy_if_set_true:n { doc@macrolike } }, - envlike .default:n = { true } - } - -\keys_define:nn { doc } - { - idxtype .tl_set:N = \doc@idxtype, - idxgroup .tl_set:N = \doc@idxgroup, - printtype .tl_set:N = \doc@printtype - } -% \end{macrocode} -% And this one only for instances of doc elements in the document, it -% covers the case where you want to document a macro which is -% declared to be \cs{outer}. This is not a concept officially -% supported by \LaTeX{} but there are cases when it gets used. +% +% Setting these options to true initially. % \begin{macrocode} -\newif\ifdoc@outer -\keys_define:nn {doc} - { - outer .choice:, - outer / true .code:n = { \legacy_if_set_true:n { doc@outer } }, - outer / false .code:n = { \legacy_if_set_false:n { doc@outer } }, - outer .default:n = { true }, - } -\ExplSyntaxOff +\doc@hyperreftrue +\doc@multicoltrue +\doc@topleveltrue % \end{macrocode} % % \subsection{Processing the package keys} diff --git a/macros/latex/base/doc.pdf b/macros/latex/base/doc.pdf index 41b3bd0270..64981124a6 100644 Binary files a/macros/latex/base/doc.pdf and b/macros/latex/base/doc.pdf differ diff --git a/macros/latex/base/docstrip.dtx b/macros/latex/base/docstrip.dtx index 22c1f69aa0..de20073c48 100644 --- a/macros/latex/base/docstrip.dtx +++ b/macros/latex/base/docstrip.dtx @@ -29,9 +29,9 @@ \catcode`\{=1 \catcode`\}=2 \def\filename{docstrip.dtx} -\def\fileversion{v2.6a} -\def\filedate{2020-11-23} -\def\docdate {2020-11-23} +\def\fileversion{v2.6b} +\def\filedate{2022-09-03} +\def\docdate {2022-09-03} %% % %\iffalse @@ -42,7 +42,7 @@ %% Frank Mittelbach %% Copyright (C) 1995 Marcin Woli\'nski %% Copyright (C) 1996-1997 Mark Wooding, Marcin Woli\'nski -%% Copyright (C) 1998-2021 LaTeX Project and the above authors. +%% Copyright (C) 1998-2022 LaTeX Project and the above authors. %% All rights are reserved. %% % @@ -2537,12 +2537,16 @@ Z % |\plusOption| is called. This macro is very similar to % |\doOption|, the only difference being that displayed % message now contains `\texttt{+}'. +% \changes{v2.6b}{2022-09-03}{Complete the handling of @@-modules from +% \texttt{l3docstrip.dtx} (gh/337) also for +/- lines (gh/903)} % \begin{macrocode} \def\plusOption+#1>#2\endLine{% \maybeMsg{<+#1 . >}% \Evaluate{#1}% \def\do##1##2##3{% - \if1\Expr{##2}\StreamPut##1{#2}\fi + \if1\Expr{##2}% + \def\inLine{#2}\replaceModuleInLine + \StreamPut##1{\inLine}\fi }% \activefiles } @@ -2553,12 +2557,16 @@ Z % When a `\texttt{-}' is found as a guard modifier, % |\minusOption| is called. This macro is very similar to % |\plusOption|, the difference is that condition is negated. +% \changes{v2.6b}{2022-09-03}{Complete the handling of @@-modules from +% \texttt{l3docstrip.dtx} (gh/337) also for +/- lines (gh/903)} % \begin{macrocode} \def\minusOption-#1>#2\endLine{% \maybeMsg{<-#1 . >}% \Evaluate{#1}% \def\do##1##2##3{% - \if1\Expr{##2}\else \StreamPut##1{#2}\fi + \if1\Expr{##2}\else + \def\inLine{#2}\replaceModuleInLine + \StreamPut##1{\inLine}\fi }% \activefiles } diff --git a/macros/latex/base/docstrip.pdf b/macros/latex/base/docstrip.pdf index cf287333f6..355dbeed98 100644 Binary files a/macros/latex/base/docstrip.pdf and b/macros/latex/base/docstrip.pdf differ diff --git a/macros/latex/base/encguide.pdf b/macros/latex/base/encguide.pdf index 38a18aa70c..d18588a172 100644 Binary files a/macros/latex/base/encguide.pdf and b/macros/latex/base/encguide.pdf differ diff --git a/macros/latex/base/exscale.pdf b/macros/latex/base/exscale.pdf index aabccee5eb..2bdb881a90 100644 Binary files a/macros/latex/base/exscale.pdf and b/macros/latex/base/exscale.pdf differ diff --git a/macros/latex/base/fix-cm.pdf b/macros/latex/base/fix-cm.pdf index d95d45ed93..c983a8e947 100644 Binary files a/macros/latex/base/fix-cm.pdf and b/macros/latex/base/fix-cm.pdf differ diff --git a/macros/latex/base/fntguide.pdf b/macros/latex/base/fntguide.pdf index a8222b760c..a2ef00a6f8 100644 Binary files a/macros/latex/base/fntguide.pdf and b/macros/latex/base/fntguide.pdf differ diff --git a/macros/latex/base/fntguide.tex b/macros/latex/base/fntguide.tex index 62d3538304..65467339f1 100644 --- a/macros/latex/base/fntguide.tex +++ b/macros/latex/base/fntguide.tex @@ -42,12 +42,17 @@ \title{\LaTeXe{} font selection} -\author{\copyright~Copyright 1995--2021, \LaTeX\ Project +\author{\copyright~Copyright 1995--2022, \LaTeX\ Project Team.\thanks{Thanks to Arash Esbati for documenting the newer NFSS features of 2020}\\ - All rights reserved.} + All rights reserved.% + \footnote{This file may distributed and/or modified under the + conditions of the \LaTeX{} Project Public License, either version 1.3c + of this license or (at your option) any later version. See the source + \texttt{fntguide.tex} for full details.}% +} -\date{December 2021} +\date{August 2022} \begin{document} @@ -1431,6 +1436,20 @@ Example: \DeclareFontEncoding{OT1}{}{} \end{verbatim} +\NEWfeature{2021/06/01} +Fonts in encoding \texttt{TS1} are usually not implementing the full encoding but only a subset. +This subset should be declared with a |\DeclareEncodingSubset| +declaration: + +\begin{decl} + |\DeclareEncodingSubset| \arg{encoding} + \arg{font family} + \arg{subset number} +\end{decl} +This should even be done if the font is implementing the full +\texttt{TS1} encoding; see page~\pageref{page:declareencodingsubset} for +further details. + Some author commands need to change their definition depending on which encoding is currently in use. For example, in the |OT1| encoding, the letter `\AE' is in slot |"1D|, whereas in the |T1| encoding it is in @@ -2048,7 +2067,7 @@ glyphs from the math fonts instead of the current text font (this means they always keep the same shape and do not nicely blend in with the text font). -\newpage +%\newpage The following tables show the macros available. The next commands are `constructed' accents and are built via \TeX{} macros: @@ -2234,7 +2253,8 @@ question arises: ``Which glyphs of the |TS1| encoding are implemented by which font?'' \NEWfeature{2021/06/01} -Fonts can be ordered in sub-encodings with the |\DeclareEncodingSubset| +Fonts\label{page:declareencodingsubset} +can be ordered in sub-encodings with the |\DeclareEncodingSubset| macro: \begin{decl} |\DeclareEncodingSubset| \arg{encoding} @@ -2577,7 +2597,14 @@ is the same as writing If only some are needed then one can define them individually but in many cases all four are wanted, hence the shortcut. - +Maintainers of font bundles that include \texttt{TS1} encoded font files +should add an appropriate declaration into the corresponding +\texttt{ts1}\textit{family}\texttt{.fd} file, because otherwise the +default subencoding is assumed, which is probably disabling too many +glyphs that are actually available in the font.\footnote{The \LaTeX{} + format contains declarations for many font families already, but this + is really the wrong place for the declarations. Thus for new fonts + they should be placed into the corresponding \texttt{.fd} file.} \section{If you need to know more \ldots} diff --git a/macros/latex/base/graphpap.pdf b/macros/latex/base/graphpap.pdf index 81fc7ecaa7..003b7a087d 100644 Binary files a/macros/latex/base/graphpap.pdf and b/macros/latex/base/graphpap.pdf differ diff --git a/macros/latex/base/ifthen.pdf b/macros/latex/base/ifthen.pdf index 10c6f991ad..f108383366 100644 Binary files a/macros/latex/base/ifthen.pdf and b/macros/latex/base/ifthen.pdf differ diff --git a/macros/latex/base/inputenc.pdf b/macros/latex/base/inputenc.pdf index 063aa537db..a82e38bc08 100644 Binary files a/macros/latex/base/inputenc.pdf and b/macros/latex/base/inputenc.pdf differ diff --git a/macros/latex/base/lamport-manual.pdf b/macros/latex/base/lamport-manual.pdf index ff9c9f2890..228b5d5327 100644 Binary files a/macros/latex/base/lamport-manual.pdf and b/macros/latex/base/lamport-manual.pdf differ diff --git a/macros/latex/base/latexrelease.pdf b/macros/latex/base/latexrelease.pdf index cd9871e06e..eb8fc4bf80 100644 Binary files a/macros/latex/base/latexrelease.pdf and b/macros/latex/base/latexrelease.pdf differ diff --git a/macros/latex/base/latexsym.pdf b/macros/latex/base/latexsym.pdf index aa3dac63d5..27de765603 100644 Binary files a/macros/latex/base/latexsym.pdf and b/macros/latex/base/latexsym.pdf differ diff --git a/macros/latex/base/lb2.pdf b/macros/latex/base/lb2.pdf index 9ad793fdfd..e22f0b68d3 100644 Binary files a/macros/latex/base/lb2.pdf and b/macros/latex/base/lb2.pdf differ diff --git a/macros/latex/base/letter.pdf b/macros/latex/base/letter.pdf index 5a8ee46a91..13e36346bb 100644 Binary files a/macros/latex/base/letter.pdf and b/macros/latex/base/letter.pdf differ diff --git a/macros/latex/base/lgc2.pdf b/macros/latex/base/lgc2.pdf index c2bf5f2103..323fa18ce5 100644 Binary files a/macros/latex/base/lgc2.pdf and b/macros/latex/base/lgc2.pdf differ diff --git a/macros/latex/base/lppl.pdf b/macros/latex/base/lppl.pdf index 298b841732..526ce5730b 100644 Binary files a/macros/latex/base/lppl.pdf and b/macros/latex/base/lppl.pdf differ diff --git a/macros/latex/base/ltboxes.dtx b/macros/latex/base/ltboxes.dtx index 43db541b98..b82f5bdb8e 100644 --- a/macros/latex/base/ltboxes.dtx +++ b/macros/latex/base/ltboxes.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltboxes.dtx} - [2022/01/31 v1.4c LaTeX Kernel (Box Commands)] + [2022/09/07 v1.4d LaTeX Kernel (Box Commands)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltboxes.dtx} @@ -1004,6 +1004,16 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\if@in@minipage@env} +% +% \changes{v1.4d}{2022/09/07} +% {Check for nested minipages and warn (gh/168)} +% \begin{macrocode} +\newif\if@in@minipage@env +% \end{macrocode} +% \end{macro} +% +% % \begin{macro}{\minipage} % \changes{v0.1a}{1993/12/03} % {Redefined to support extra optional arguments} @@ -1060,6 +1070,28 @@ \color@begingroup \hsize\@tempdima \textwidth\hsize \columnwidth\hsize +% \end{macrocode} +% We check for nested minipages inside the box so that there is +% always a group resetting the switch even if the code does not use +% \cs{begin} to start the minipage. +% \changes{v1.4d}{2022/09/07} +% {Check for nested minipages and warn (gh/168)} +% \begin{macrocode} + \if@in@minipage@env +% \end{macrocode} +% We only issue a warning if the outer minipage contained footnotes +% because that is the problematical case. +% \begin{macrocode} + \ifvoid\@mpfootins\else + \@latex@warning{Nested minipage: + footnotes may be misplaced}% + \fi + \else + \@in@minipage@envtrue + \fi +% \end{macrocode} +% +% \begin{macrocode} \@parboxrestore \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@ \let\@footnotetext\@mpfootnotetext diff --git a/macros/latex/base/ltclass.dtx b/macros/latex/base/ltclass.dtx index 35c4251fce..a525b6f573 100644 --- a/macros/latex/base/ltclass.dtx +++ b/macros/latex/base/ltclass.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltclass.dtx} - [2022/06/20 v1.5c LaTeX Kernel (Class & Package Interface)] + [2022/10/22 v1.5e LaTeX Kernel (Class & Package Interface)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltclass.dtx} @@ -1302,7 +1302,10 @@ {\@expl@@@filehook@resolve@file@subst@@w #3.#1\@nil}% \reserved@a\reserved@b \@expl@@@filehook@clear@replacement@flag@@ - \expandafter\xdef\csname opt@\reserved@a\endcsname{% +% \end{macrocode} +% \changes{v1.5d}{2022/10/10}{Use \cs{protected@xdef}.} +% \begin{macrocode} + \expandafter\protected@xdef\csname opt@\reserved@a\endcsname{% \@ifundefined{opt@\reserved@a}\@empty {\csname opt@\reserved@a\endcsname,}% \zap@space#2 \@empty}% @@ -1476,10 +1479,12 @@ % {Star form added.} % \changes{v0.2c}{1993/11/17} % {restoring \cs{@fileswith@pti@ns} added.} +% \changes{v1.5d}{2022/10/10} +% {Use \cs{protected@edef}.} % \begin{macrocode} \def\ProcessOptions{% \let\ds@\@empty - \edef\@curroptions{\@ptionlist{\@currname.\@currext}}% + \protected@edef\@curroptions{\@ptionlist{\@currname.\@currext}}% \@ifstar\@xprocess@ptions\@process@ptions} \@onlypreamble\ProcessOptions % \end{macrocode} @@ -1505,6 +1510,7 @@ % \changes{v0.2y}{1994/02/07} % {Add extra ,s so `two' is not matched with `twocolumn'} % \changes{v1.3z}{2021/03/05}{modify so braces to not give errors (gh/513)} +% \changes{v1.5e}{2022/10/22}{Use \cs{detokenize}} % \begin{macrocode} % %\IncludeInRelease{2021/06/01}% @@ -1515,7 +1521,7 @@ \ifx\@classoptionslist\relax\else \@for\CurrentOption:=\@classoptionslist\do{% \ifx\CurrentOption\@empty\else - \@ifundefined{ds@\CurrentOption}{}{% + \@ifundefined{ds@\detokenize\expandafter{\CurrentOption}}{}{% \@use@ption \expandafter\let\csname ds@\CurrentOption\endcsname\@empty }% @@ -1552,6 +1558,7 @@ % \end{macrocode} % % The common part of |\ProcessOptions| and |\ProcessOptions*|. +% \changes{v1.5e}{2022/10/22}{Use \cs{detokenize}} % \begin{macrocode} % %<*2ekernel|latexrelease> @@ -1559,7 +1566,7 @@ % {\@process@pti@ns}{Unused options issue}% \def\@process@pti@ns{% \@for\CurrentOption:=\@curroptions\do{% - \@ifundefined{ds@\CurrentOption}% + \@ifundefined{ds@\detokenize\expandafter{\CurrentOption}}% {\@use@ption \default@ds}% % \end{macrocode} @@ -1627,6 +1634,7 @@ % \changes{v1.0e}{1994/05/17} % {Execute option after removing from list, not before} % \changes{v1.3x}{2021/02/18}{filter out =value from unused option list (gh/85)} +% \changes{v1.5e}{2022/10/22}{Use \cs{detokenize}} % \begin{macrocode} % %\IncludeInRelease{2021/06/01}% @@ -1636,7 +1644,7 @@ \@expandtwoargs\@removeelement {\expandafter\@remove@eq@value\CurrentOption=\@nil}% \@unusedoptionlist\@unusedoptionlist - \csname ds@\CurrentOption\endcsname} + \csname ds@\detokenize\expandafter{\CurrentOption}\endcsname} % %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% @@ -1988,6 +1996,7 @@ % \changes{v2.1b}{2016/11/09} % {Improve \cs{ifx} tests PR/4497} % \changes{v1.3x}{2021/02/18}{save raw class option list (gh/85)} +% \changes{v1.5e}{2022/10/22}{Use \cs{protected@xdef}.} % \begin{macrocode} % %\IncludeInRelease{2020/10/01}% @@ -1996,7 +2005,7 @@ \def\@fileswith@pti@ns#1[#2]#3[#4]{% \ifx#1\@clsextension \ifx\@classoptionslist\relax - \xdef\@classoptionslist{\zap@space#2 \@empty}% + \protected@xdef\@classoptionslist{\zap@space#2 \@empty}% % \end{macrocode} % Save raw class list. % \begin{macrocode} @@ -2177,21 +2186,24 @@ % \end{macrocode} % \changes{v1.5b}{2022/03/18}{Switch to \cs{ProcessKeyOptions}} % \changes{v1.5c}{2022/06/20}{Pass raw options to \cs{ProcessKeyOptions}} +% \changes{v1.5e}{2022/10/20} +% {Define key option handler in \pkg{ltkeys}} % In the current preferred approach, a key family name will exist for % processing using \pkg{ltkeys}. In that case, we replace the previous % package options with the new ones, then call the key handler. % Otherwise, we use the more classical clash handler. % \begin{macrocode} {% - \@ifundefined{opt@fam@\@currname.\@currext} + \@ifundefined{opt@handler@\@currname.\@currext} {\@onefilewithoptions@clashchk{#2}} {% - \expandafter\edef\csname opt@\@currname.\@currext\endcsname +% \end{macrocode} +% \changes{v1.5d}{2022/10/10}{Use \cs{protected@edef}.} +% \begin{macrocode} + \expandafter\protected@edef\csname opt@\@currname.\@currext\endcsname {\zap@space#2 \@empty}% \@namedef{@raw@opt@\@currname.\@currext}{#2}% - \expandafter\expandafter\expandafter\ProcessKeyOptions - \expandafter\expandafter\expandafter - [\csname opt@fam@\@currname.\@currext\endcsname]% + \@nameuse{opt@handler@\@currname.\@currext}% }% }% {\makeatletter @@ -2693,10 +2705,11 @@ % \changes{v0.2v}{1994/01/29} % {Macro added.} % \changes{v1.0t}{1995/11/14}{Allow empty option} +% \changes{v1.5d}{2022/10/10}{Use \cs{protected@edef}.} % \begin{macrocode} \def\@@unprocessedoptions{% \ifx\@currext\@pkgextension - \edef\@curroptions{\@ptionlist{\@currname.\@currext}}% + \protected@edef\@curroptions{\@ptionlist{\@currname.\@currext}}% \@for\CurrentOption:=\@curroptions\do{% \ifx\CurrentOption\@empty\else\@unknownoptionerror\fi}% \fi} diff --git a/macros/latex/base/ltcmd.dtx b/macros/latex/base/ltcmd.dtx index 59aa5bf475..14d6756f5c 100644 --- a/macros/latex/base/ltcmd.dtx +++ b/macros/latex/base/ltcmd.dtx @@ -34,8 +34,8 @@ %%% From File: ltcmd.dtx % % \begin{macrocode} -\def\ltcmdversion{v1.0l} -\def\ltcmddate{2022-03-18} +\def\ltcmdversion{v1.1a} +\def\ltcmddate{2022-08-16} % \end{macrocode} % %<*driver> @@ -247,6 +247,15 @@ % \end{macrocode} % \end{variable} % +% \begin{variable}{\l_@@_suppress_strip_bool} +% \changes{v1.1a}{2022/08/10}{New switch} +% Used to indicate that an a pair of braces should not be stripped from +% an optional argument. +% \begin{macrocode} +\bool_new:N \l_@@_suppress_strip_bool +% \end{macrocode} +% \end{variable} +% % \begin{variable}{\l_@@_m_args_int} % The number of \texttt{m} arguments: if this is the same as the total % number of arguments, then a short-cut can be taken in the creation of @@ -315,6 +324,19 @@ % \end{macrocode} % \end{variable} % +% \begin{variable}{\q_@@_recursion_tail,\q_@@_recursion_stop} +% \begin{macro}{\@@_if_recursion_tail_stop_do:Nn} +% \begin{macro}{\@@_use_i_delimit_by_q_recursion_stop:nw} +% Quarks and functions for internal processing. +% \begin{macrocode} +\quark_new:N \q_@@_recursion_tail +\quark_new:N \q_@@_recursion_stop +\__kernel_quark_new_test:N \@@_if_recursion_tail_stop_do:Nn +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{variable} +% % \begin{variable}{\l_@@_tmp_prop, \l_@@_tmpa_tl, \l_@@_tmpb_tl} % \begin{macro}{\@@_tmp:w} % Scratch space. @@ -874,7 +896,7 @@ % \item Check that each argument has the correct number of data items % associated with it, and that where a single character is required, % one has actually been supplied. -% \item Check that processors and the markers~|+| and~|!| are followed +% \item Check that processors and the markers~|+|, |!| and~|=| are followed % by an argument for which they make sense, and are not redundant. % \item Check the absence of forbidden types for expandable commands, % namely \texttt{G}/\texttt{v} always, and \texttt{l}/\texttt{u} @@ -918,6 +940,7 @@ \bool_set_true:N \l_@@_grab_expandably_bool \bool_set_false:N \l_@@_obey_spaces_bool \bool_set_false:N \l_@@_long_bool + \bool_set_false:N \l_@@_suppress_strip_bool \bool_set_false:N \l_@@_some_obey_spaces_bool \bool_set_false:N \l_@@_some_long_bool \bool_set_false:N \l_@@_some_short_bool @@ -1020,7 +1043,11 @@ % \@@_normalize_type_>:w, % \@@_normalize_type_+:w, % \@@_normalize_type_!:w, +% \@@_normalize_type_=:w % } +% \changes{v1.1a}{2022/08/10}{Refactor to use common auxiliary} +% \changes{v1.1a}{2022/08/10}{Add support for \texttt{=} modifier} +% \begin{macro}{\@@_normalize_type_aux:NnNn} % Check that these prefixes have arguments, namely that the next token % is not \cs{q_recursion_tail}, and remember to leave it after the % looping macro. Processors are forbidden in expandable commands. @@ -1044,33 +1071,52 @@ } \cs_new_protected:cpn { @@_normalize_type_+:w } #1 { - \quark_if_recursion_tail_stop_do:nn {#1} { \@@_bad_arg_spec:wn } - \bool_if:NT \l_@@_long_bool + \@@_normalize_type_aux:NnNn + {#1} + \l_@@_long_bool + { \bool_set_true:N \l_@@_long_bool } + } +\cs_new_protected:cpn { @@_normalize_type_!:w } #1 + { + \@@_normalize_type_aux:NnNn ! {#1} + \l_@@_obey_spaces_bool { - \msg_error:nnxx { cmd } { two-markers } - { \@@_environment_or_command: } { + } - \@@_bad_def:wn + \bool_set_true:N \l_@@_obey_spaces_bool + \bool_set_true:N \l_@@_some_obey_spaces_bool } - \bool_set_true:N \l_@@_long_bool - \int_decr:N \l_@@_current_arg_int - \@@_normalize_arg_spec_loop:n {#1} } -\cs_new_protected:cpn { @@_normalize_type_!:w } #1 +\cs_new_protected:cpn { @@_normalize_type_=:w } #1#2 + { + \@@_normalize_type_aux:NnNn = {#2} + \l_@@_suppress_strip_bool + { + \bool_if:NT \l_@@_expandable_bool + { + \msg_error:nnxx { cmd } { keyval-in-expandable } + { \iow_char:N \\ \l_@@_function_tl } { \tl_to_str:n {#1} } + \@@_bad_def:wn + } + \bool_set_true:N \l_@@_suppress_strip_bool + \bool_set_false:N \l_@@_grab_expandably_bool + \tl_put_right:Nx \l_@@_arg_spec_tl + { = { \tl_trim_spaces:n {#1} } } + } + } +\cs_new_protected:Npn \@@_normalize_type_aux:NnNn #1#2#3#4 { - \quark_if_recursion_tail_stop_do:nn {#1} { \@@_bad_arg_spec:wn } - \bool_if:NT \l_@@_obey_spaces_bool + \quark_if_recursion_tail_stop_do:nn {#2} { \@@_bad_arg_spec:wn } + \bool_if:NT #3 { \msg_error:nnxx { cmd } { two-markers } - { \@@_environment_or_command: } { ! } + { \@@_environment_or_command: } { #1 } \@@_bad_def:wn } - \bool_set_true:N \l_@@_obey_spaces_bool - \bool_set_true:N \l_@@_some_obey_spaces_bool + #4 \int_decr:N \l_@@_current_arg_int - \@@_normalize_arg_spec_loop:n {#1} + \@@_normalize_arg_spec_loop:n {#2} } % \end{macrocode} % \end{macro} +% \end{macro} % % \begin{macro} % { @@ -1224,12 +1270,12 @@ % \end{macro} % % \begin{macro}{\@@_allowed_token_check:N} -% Some tokens are now allowed as delimiters for some argument types, +% Some tokens are not allowed as delimiters for some argument types, % notably implicit begin/end-group tokens (|\bgroup|/|\egroup|). % The major problem with these tokens is that for |\peek_...| functions, -% a literal~|{|$_1$. is virtually indistinguishable from a |\bgroup| or +% a literal~|{|$_1$ is virtually indistinguishable from a |\bgroup| or % other token which was |\let| to a~|{|$_1$, and the same goes -% for~|}|$_2$. All other tokens can be easily distingushed from their +% for~|}|$_2$. All other tokens can be easily distinguished from their % implicit counterparts by grabbing them and looking at the string % length (see \cs{@@_token_if_cs:NTF}), but for begin/end group tokens % that is not possible without the risk of mistakenly grabbing the @@ -1324,13 +1370,13 @@ % \begin{macro}{\@@_add_arg_spec:n, \@@_add_arg_spec_mandatory:n} % When adding an argument to the argument specification, set the % \texttt{some_long} or \texttt{some_short} booleans as appropriate -% and clear the booleans keeping track of |+| and |!| markers. +% and clear the booleans keeping track of |+|, |!| and |=| markers. % Before that, test for a short argument following some long % arguments: this is forbidden for expandable commands and prevents % grabbing arguments expandably. % % For mandatory arguments do some more work, in particular complain if -% they were preceeded by~|!|. +% they were preceded by~|!|. % \begin{macrocode} \cs_new_protected:Npn \@@_add_arg_spec:n #1 { @@ -1387,6 +1433,7 @@ \int_zero:N \l_@@_current_arg_int \bool_set_false:N \l_@@_long_bool \bool_set_false:N \l_@@_obey_spaces_bool + \bool_set_false:N \l_@@_suppress_strip_bool \int_zero:N \l_@@_m_args_int \bool_set_false:N \l_@@_defaults_bool \tl_clear:N \l_@@_defaults_tl @@ -1484,6 +1531,23 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\@@_add_type_=:} +% \changes{v1.1a}{2022/08/10}{Add support for \texttt{=} modifier} +% A mix of the ideas from above: set a flag and add a processor. +% \begin{macrocode} +\cs_new_protected:cpn { @@_add_type_=:w } #1 + { + \@@_flush_m_args: + \bool_set_true:N \l_@@_prefixed_bool + \bool_set_true:N \l_@@_suppress_strip_bool + \bool_set_true:N \l_@@_process_some_bool + \tl_put_left:Nn \l_@@_process_one_tl + { { \@@_arg_to_keyvalue:nn {#1} } } + \@@_prepare_signature_bypass:N + } +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\@@_add_type_b:w} % \begin{macrocode} \cs_new_protected:Npn \@@_add_type_b:w @@ -1677,11 +1741,16 @@ @@_grab_ #1 \bool_if:NT \l_@@_long_bool { _long } \bool_if:NT \l_@@_obey_spaces_bool { _obey_spaces } + \bool_lazy_and:nnT + { \l_@@_suppress_strip_bool } + { \str_if_eq_p:nn {#1} { D } } + { _no_strip } :w } } \bool_set_false:N \l_@@_long_bool \bool_set_false:N \l_@@_obey_spaces_bool + \bool_set_false:N \l_@@_suppress_strip_bool \tl_put_right:Nx \l_@@_process_all_tl { { @@ -2488,7 +2557,7 @@ \quark_if_nil:nF {#1} { \tl_const:cn { c_@@_show_type_#1_tl } {#2} \@@_tmp:w } } -\@@_tmp:w t0 r1 d1 R2 D2 O3 e4 E5 +6 !6 >7 \q_nil \q_nil +\@@_tmp:w t0 r1 d1 R2 D2 O3 e4 E5 +6 !6 >7 =7 \q_nil \q_nil % \end{macrocode} % % \begin{macro}{ @@ -2615,6 +2684,7 @@ % \@@_grab_b_aux:NNw, % \@@_grab_b_end:Nw % } +% \changes{v1.1a}{2022/08/10}{Track changes in \texttt{D}-type implementation} % This uses the well-tested code of \texttt{D}-type arguments, % skipping the peeking step because the \texttt{b}-type argument is % always present, and adding a cleanup stage at the end by hijacking @@ -2640,7 +2710,7 @@ { \@@_grab_b_aux:NNw \cs_set_protected:Npn \exp_not:n } \cs_new_protected:Npn \@@_grab_b_aux:NNw #1#2#3 \@@_run_code: { - \@@_grab_D_aux:NNnN \begin \end {#3} #1 + \@@_grab_D_aux:NNnNN \begin \end {#3} #1 \use_ii:nn \tl_put_left:Nn \l_@@_signature_tl { \@@_grab_b_end:Nw #2 } \tl_set_eq:NN \l_@@_saved_args_tl \l_@@_args_tl \tl_clear:N \l_@@_args_tl @@ -2660,37 +2730,69 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_grab_D:w} -% \begin{macro}{\@@_grab_D_long:w} -% \begin{macro}{\@@_grab_D_obey_spaces:w} -% \begin{macro}{\@@_grab_D_long_obey_spaces:w} +% \begin{macro} +% { +% \@@_grab_D:w , +% \@@_grab_D_long:w , +% \@@_grab_D_obey_spaces:w , +% \@@_grab_D_long_obey_spaces:w , +% \@@_grab_D_no_strip:w , +% \@@_grab_D_long_no_strip:w , +% \@@_grab_D_obey_spaces_no_strip:w , +% \@@_grab_D_long_obey_spaces_no_strip:w +% } +% \changes{v1.1a}{2022/08/10}{Add support for skipping brace stripping} % The generic delimited argument grabber. The auxiliary function does % a peek test before calling \cs{@@_grab_D_call:Nw}, so that the % optional nature of the argument works as expected. % \begin{macrocode} \cs_new_protected:Npn \@@_grab_D:w #1#2#3 \@@_run_code: { - \@@_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected_nopar:Npn - \@@_peek_nonspace_remove:NTF + \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn + \@@_peek_nonspace_remove:NTF \use_ii:nn } \cs_new_protected:Npn \@@_grab_D_long:w #1#2#3 \@@_run_code: { - \@@_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected:Npn - \@@_peek_nonspace_remove:NTF + \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn + \@@_peek_nonspace_remove:NTF \use_ii:nn } \cs_new_protected:Npn \@@_grab_D_obey_spaces:w #1#2#3 \@@_run_code: { - \@@_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected_nopar:Npn - \@@_peek_meaning_remove:NTF + \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn + \@@_peek_meaning_remove:NTF \use_ii:nn } \cs_new_protected:Npn \@@_grab_D_long_obey_spaces:w #1#2#3 \@@_run_code: { - \@@_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected:Npn - \@@_peek_meaning_remove:NTF + \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn + \@@_peek_meaning_remove:NTF \use_ii:nn + } +\cs_new_protected:Npn \@@_grab_D_no_strip:w + #1#2#3 \@@_run_code: + { + \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn + \@@_peek_nonspace_remove:NTF \use_none:n + } +\cs_new_protected:Npn \@@_grab_D_long_no_strip:w + #1#2#3 \@@_run_code: + { + \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn + \@@_peek_nonspace_remove:NTF \use_none:n + } +\cs_new_protected:Npn \@@_grab_D_obey_spaces_no_strip:w + #1#2#3 \@@_run_code: + { + \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected_nopar:Npn + \@@_peek_meaning_remove:NTF \use_none:n + } +\cs_new_protected:Npn \@@_grab_D_long_obey_spaces_no_strip:w + #1#2#3 \@@_run_code: + { + \@@_grab_D_aux:NNnNNN #1 #2 {#3} \cs_set_protected:Npn + \@@_peek_meaning_remove:NTF \use_none:n } % \end{macrocode} +% \begin{macro}{\@@_grab_D_aux:NNnNNN} % \begin{macro}{\@@_grab_D_aux:NNnNN} -% \begin{macro}{\@@_grab_D_aux:NNnN} % This is a bit complicated. The idea is that, in order to check for % nested optional argument tokens (\texttt{[[...]]} and so on) the % argument needs to be grabbed without removing any braces at all. If @@ -2699,9 +2801,9 @@ % prevents loss of braces, and there is then a test to see if there are % nested delimiters to handle. % \begin{macrocode} -\cs_new_protected:Npn \@@_grab_D_aux:NNnNN #1#2#3#4#5 +\cs_new_protected:Npn \@@_grab_D_aux:NNnNNN #1#2#3#4#5#6 { - \@@_grab_D_aux:NNnN #1#2 {#3} #4 + \@@_grab_D_aux:NNnNN #1#2 {#3} #4 #6 #5 #1 { \@@_grab_D_call:Nw #1 } { \@@_add_arg:o \c_novalue_tl } @@ -2712,9 +2814,10 @@ % extra factors to allow for: the argument might be entirely empty, and % spaces at the start and end of the input must be retained around a brace % group. Also notice that a \emph{blank} argument might still contain -% spaces. +% spaces. To allow for suppression of brace stripping, the business end +% is passed here as |#5|. % \begin{macrocode} -\cs_new_protected:Npn \@@_grab_D_aux:NNnN #1#2#3#4 +\cs_new_protected:Npn \@@_grab_D_aux:NNnNN #1#2#3#4#5 { \tl_set:Nn \l_@@_signature_tl {#3} \exp_after:wN #4 \l_@@_fn_tl ##1 #2 @@ -2728,7 +2831,7 @@ \str_if_eq:eeTF { \exp_not:o { \use_none:n ##1 } } { { \exp_not:o { \use_ii:nnn ##1 \q_nil } } } - { \@@_add_arg:o { \use_ii:nn ##1 } } + { \@@_add_arg:o { #5 ##1 } } { \@@_add_arg:o { \use_none:n ##1 } } } } @@ -2738,9 +2841,6 @@ % \end{macro} % \end{macro} % \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} % % \begin{macro}{\@@_grab_D_nested:NNnN} % \begin{macro}{\@@_grab_D_nested:w} @@ -3039,6 +3139,7 @@ % % \begin{macro}{\@@_grab_R:w, \@@_grab_R_long:w} % \begin{macro}{\@@_grab_R_aux:NNnN} +% \changes{v1.1a}{2022/08/10}{Track changes in \texttt{D}-type implementation} % The grabber for \texttt{R}-type arguments is basically the same as % that for \texttt{D}-type ones, but always skips spaces (as it is mandatory) % and has a hard-coded error message. @@ -3049,7 +3150,7 @@ { \@@_grab_R_aux:NNnN #1 #2 {#3} \cs_set_protected:Npn } \cs_new_protected:Npn \@@_grab_R_aux:NNnN #1#2#3#4 { - \@@_grab_D_aux:NNnN #1 #2 {#3} #4 + \@@_grab_D_aux:NNnNN #1 #2 {#3} #4 \use_ii:nn \@@_peek_nonspace_remove:NTF #1 { \@@_grab_D_call:Nw #1 } { @@ -3873,6 +3974,190 @@ % \end{macrocode} % \end{macro} % +% \subsection{Conversion to key--value form} +% +% This is implemented as a process but with no public interfaces, +% hence is treated separately from the others: it's a feature of +% \pkg{ltcmd} which just happens to use the same mechanism as a processor. +% +% \begin{macro}{\@@_arg_to_keyvalue:nn} +% \changes{v1.1a}{2022/08/10}{New internal arg-to-keyval processor} +% \begin{macro}{\@@_arg_to_keyvalue_braces:nnn} +% \begin{macro}{\@@_arg_to_keyvalue_auxi:nnn} +% \begin{macro}{\@@_arg_to_keyvalue_auxii:Nnnn} +% \begin{macro}{\@@_arg_to_keyvalue_auxiii:nnn} +% \begin{macro}{\@@_arg_to_keyvalue_auxiv:Nnnn} +% \begin{macro}{\@@_arg_to_keyvalue_auxv:nn} +% \begin{macro}{\@@_arg_to_keyvalue_loop:w} +% \begin{macro}{\@@_arg_to_keyvalue_loop_group:n} +% \begin{macro}{\@@_arg_to_keyvalue_loop_space:w} +% \begin{macro}{\@@_arg_to_keyvalue_loop_N_type:N} +% \begin{macro}{\@@_arg_to_keyvalue_math:w} +% \begin{macro}{\@@_arg_to_keyvalue_math_N_type:N} +% \begin{macro}{\@@_arg_to_keyvalue_math_group:n} +% \begin{macro}{\@@_arg_to_keyvalue_math_space:w} +% \begin{macro}{\@@_arg_to_keyvalue_set_default:nn} +% \begin{macro}{\@@_arg_to_keyvalue_set_keyvalue:nn} +% \begin{macro}[EXP]{\@@_split_N_head_apply:Nn} +% \begin{macro}[EXP]{\@@_split_N_head_apply_aux:NNw} +% If the entire argument is braced, we treat as free text and return as +% the value for the text key. Alternatively, if the start of the input is +% |=,| then it is forced to be key--value. To avoid needing to worry about +% catcodes for this, and to allow spaces around the |=|, we use a +% series of steps rather than a delimited argument. +% \begin{macrocode} +\cs_new_protected:Npn \@@_arg_to_keyvalue:nn #1#2 + { + \tl_trim_spaces_apply:nN {#2} \@@_arg_to_keyvalue_braces:nnn + {#1} {#2} + } +\cs_new_protected:Npn \@@_arg_to_keyvalue_braces:nnn #1#2#3 + { + \tl_if_head_is_group:nT {#1} + { + \tl_if_blank:oT { \use_none:n #1 } + { + \tl_set:Nx \ProcessedArgument { #2 = { \exp_not:n #1 } } + \use_none:nnnn + } + } + \@@_arg_to_keyvalue_auxi:nnn {#1} {#2} {#3} + } +\cs_new:Npn \@@_arg_to_keyvalue_auxi:nnn #1 + { + \tl_if_head_is_N_type:nTF {#1} + { \@@_split_N_head_apply:Nn \@@_arg_to_keyvalue_auxii:Nnnn {#1} } + { \@@_arg_to_keyvalue_auxv:nn } + } +\cs_new:Npn \@@_arg_to_keyvalue_auxii:Nnnn #1#2 + { + \str_if_eq:eeTF { \exp_not:n {#1} } { = } + { \tl_trim_spaces_apply:nN {#2} \@@_arg_to_keyvalue_auxiii:nnn } + { \@@_arg_to_keyvalue_auxv:nn } + } +\cs_new:Npn \@@_arg_to_keyvalue_auxiii:nnn #1 + { + \tl_if_head_is_N_type:nTF {#1} + { \@@_split_N_head_apply:Nn \@@_arg_to_keyvalue_auxiv:Nnnn {#1} } + { \@@_arg_to_keyvalue_auxv:nn } + } +\cs_new:Npn \@@_arg_to_keyvalue_auxiv:Nnnn #1#2 + { + \str_if_eq:eeTF { \exp_not:n {#1} } { , } + { \tl_set:Nn \ProcessedArgument {#2} \use_none:nn } + { \@@_arg_to_keyvalue_auxv:nn } + } +% \end{macrocode} +% The two clear-cut cases have been eliminated, and we therefore have to deal +% with a search for |=| signs. We need an \enquote{action} loop here +% so we do not get mislead by for example |{=}|. As the code here is for +% very much predictable types of input, we hard-code what constitutes +% math mode opening and closing. At the very beginning, the default +% key (|#1|) and the argument as given by the user (|#2|) are placed +% right after the \cs{q_@@_recursion_stop}, so that when the recursion +% ends, the macros \cs{@@_arg_to_keyvalue_set_default:nn} or +% \cs{@@_arg_to_keyvalue_set_keyvalue:nn} can be used to grab these +% two items and set the \cs{ProcessedArgument} accordingly. +% \begin{macrocode} +\cs_new_protected:Npn \@@_arg_to_keyvalue_auxv:nn #1#2 + { + \@@_arg_to_keyvalue_loop:w #2 + \q_@@_recursion_tail \q_@@_recursion_stop {#1} {#2} + } +\cs_new_protected:Npn \@@_arg_to_keyvalue_loop:w #1 \q_@@_recursion_stop + { + \tl_if_head_is_N_type:nTF {#1} + { \@@_arg_to_keyvalue_loop_N_type:N } + { + \tl_if_head_is_group:nTF {#1} + { \@@_arg_to_keyvalue_loop_group:n } + { \@@_arg_to_keyvalue_loop_space:w } + } + #1 \q_@@_recursion_stop + } +\cs_new_protected:Npn \@@_arg_to_keyvalue_loop_group:n #1 + { \@@_arg_to_keyvalue_loop:w } +\use:n { \cs_new_protected:Npn \@@_arg_to_keyvalue_loop_space:w } ~ + { \@@_arg_to_keyvalue_loop:w } +\cs_new_protected:Npn \@@_arg_to_keyvalue_loop_N_type:N #1 + { + \@@_if_recursion_tail_stop_do:Nn #1 + { \@@_arg_to_keyvalue_set_default:nn } + \str_if_eq:nnTF {#1} { = } + { + \@@_use_i_delimit_by_q_recursion_stop:nw + { \@@_arg_to_keyvalue_set_keyvalue:nn } + } + { + \bool_lazy_or:nnTF + { \token_if_math_toggle_p:N #1 } + { \str_if_eq_p:nn {#1} { \( } } + { \@@_arg_to_keyvalue_math:w } + { \@@_arg_to_keyvalue_loop:w } + } + } +\cs_new_protected:Npn \@@_arg_to_keyvalue_math:w #1 \q_@@_recursion_stop + { + \tl_if_head_is_N_type:nTF {#1} + { \@@_arg_to_keyvalue_math_N_type:N } + { + \tl_if_head_is_group:nTF {#1} + { \@@_arg_to_keyvalue_math_group:n } + { \@@_arg_to_keyvalue_math_space:w } + } + #1 \q_@@_recursion_stop + } +\cs_new_protected:Npn \@@_arg_to_keyvalue_math_N_type:N #1 + { + \@@_if_recursion_tail_stop_do:Nn #1 + { \@@_arg_to_keyvalue_set_default:nn } + \bool_lazy_or:nnTF + { \token_if_math_toggle_p:N #1 } + { \str_if_eq_p:nn {#1} { \) } } + { \@@_arg_to_keyvalue_loop:w } + { \@@_arg_to_keyvalue_math:w } + } +\cs_new_protected:Npn \@@_arg_to_keyvalue_math_group:n #1 + { \@@_arg_to_keyvalue_math:w } +\use:n { \cs_new_protected:Npn \@@_arg_to_keyvalue_math_space:w } ~ + { \@@_arg_to_keyvalue_math:w } +\cs_new_protected:Npn \@@_arg_to_keyvalue_set_default:nn #1#2 + { \tl_set:Nn \ProcessedArgument { #1 = {#2} } } +\cs_new_protected:Npn \@@_arg_to_keyvalue_set_keyvalue:nn #1#2 + { \tl_set:Nn \ProcessedArgument {#2} } +% \end{macrocode} +% A utility to allow us to grab the first \texttt{N}-type token without +% risking brace stripping the rest of the input. +% \begin{macrocode} +\cs_new:Npn \@@_split_N_head_apply:Nn #1#2 + { \exp:w \if_false: { \fi: \@@_split_N_head_apply_aux:NNw #1#2 } } +\cs_new:Npn \@@_split_N_head_apply_aux:NNw #1#2 + { + \exp_after:wN \exp_end: + \exp_after:wN #1 \exp_after:wN #2 \exp_after:wN { \if_false: } \fi: + } + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% % \subsection{Access to the argument specification} % % \begin{macro}{\@@_get_arg_spec_error:N, \@@_get_arg_spec_error:n} @@ -4372,6 +4657,13 @@ This~is~only~supported~for~robust~commands,~but~not~for~expandable~ones. \c_@@_ignore_def_tl } +\msg_new:nnnn { cmd } { keyval-in-expandable } + { Invalid~argument~prefix~'='~in~command~'#1'. } + { + The~argument~specification~for~'#1'~contains~a~key--value~marker~'={#2}'.~ + This~is~only~supported~for~robust~commands,~but~not~for~expandable~ones. + \c_@@_ignore_def_tl + } \msg_new:nnnn { cmd } { too-many-args } { Too~many~arguments~for~#1. } { diff --git a/macros/latex/base/ltcmdhooks-code.pdf b/macros/latex/base/ltcmdhooks-code.pdf index c5ea646d28..0ff4218c8d 100644 Binary files a/macros/latex/base/ltcmdhooks-code.pdf and b/macros/latex/base/ltcmdhooks-code.pdf differ diff --git a/macros/latex/base/ltcmdhooks-doc.pdf b/macros/latex/base/ltcmdhooks-doc.pdf index f584f9915f..4e902ecb97 100644 Binary files a/macros/latex/base/ltcmdhooks-doc.pdf and b/macros/latex/base/ltcmdhooks-doc.pdf differ diff --git a/macros/latex/base/ltdefns.dtx b/macros/latex/base/ltdefns.dtx index 9e1fa43fad..bd820e7cf2 100644 --- a/macros/latex/base/ltdefns.dtx +++ b/macros/latex/base/ltdefns.dtx @@ -32,7 +32,7 @@ %<*driver> % \fi \ProvidesFile{ltdefns.dtx} - [2022/05/13 v1.5q LaTeX Kernel (definition commands)] + [2022/05/22 v1.5r LaTeX Kernel (definition commands)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltdefns.dtx} @@ -966,9 +966,22 @@ % % \begin{macro}{\@expandtwoargs} % A macro to totally expand two arguments to another macro +% \changes{v1.5r}{2022/10/22}{Use \cs{protected@edef}.} % \begin{macrocode} +% +%\IncludeInRelease{2022/11/01}% +% {\@expandtwoargs}{protected edef}% +%<*2ekernel|latexrelease> \def\@expandtwoargs#1#2#3{% -\edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a} +\protected@edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a} +% +%\EndIncludeInRelease +%\IncludeInRelease{00/00/00}% +% {\@expandtwoargs}{protected edef}% +%\def\@expandtwoargs#1#2#3{% +%\edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a} +%\EndIncludeInRelease +%<*2ekernel> % \end{macrocode} % \end{macro} % diff --git a/macros/latex/base/ltfilehook-code.pdf b/macros/latex/base/ltfilehook-code.pdf index 2ff4c09418..77472b7457 100644 Binary files a/macros/latex/base/ltfilehook-code.pdf and b/macros/latex/base/ltfilehook-code.pdf differ diff --git a/macros/latex/base/ltfilehook-doc.pdf b/macros/latex/base/ltfilehook-doc.pdf index c29c190154..c3d3c87cb6 100644 Binary files a/macros/latex/base/ltfilehook-doc.pdf and b/macros/latex/base/ltfilehook-doc.pdf differ diff --git a/macros/latex/base/ltfilehook.dtx b/macros/latex/base/ltfilehook.dtx index 8b5e982591..c8503de891 100644 --- a/macros/latex/base/ltfilehook.dtx +++ b/macros/latex/base/ltfilehook.dtx @@ -31,8 +31,8 @@ %%% From File: ltfilehook.dtx % % \begin{macrocode} -\providecommand\ltfilehookversion{v1.0m} -\providecommand\ltfilehookdate{2022/04/01} +\providecommand\ltfilehookversion{v1.0n} +\providecommand\ltfilehookdate{2022/08/18} % \end{macrocode} % %<*driver> @@ -1513,10 +1513,25 @@ \global\@namedef{@pkg-disable@#1.\@pkgextension}{#2}} % \end{macrocode} % +% \changes{v1.0n}{2022/08/18}{Inhibit checking the loaded version when +% package is load-disabled, and write to the .log (gh/888)} +% Here we check if a control sequence named +% \cs[no-index]{@pkg-disable@\meta{name}.sty} is defined, and if so +% don't use the package loading code |#2|, but use the replacement +% code stored in that control sequence, write something to the log, +% and then prevent \cs{@onefilewithoptions} from sanity-checking the +% requested package date (the \tn{expandafter} here triggers one in +% \cs{@onefilewithoptions} that ends a conditional there, and the +% \tn{@gobbletwo} removes the date checking code from the input +% stream). % \begin{macrocode} \def\@disable@packageload@do#1#2{% - \@ifundefined{@pkg-disable@#1}{#2}% - {\@nameuse{@pkg-disable@#1}}} + \@ifundefined{@pkg-disable@#1}% + {#2}% + {\@nameuse{@pkg-disable@#1}% + \@latex@info{Package '#1' has been disabled.% + \MessageBreak Load request ignored}% + \expandafter\@gobbletwo}} % \end{macrocode} % % \cs{reenable@package@load} undefines diff --git a/macros/latex/base/ltfinal.dtx b/macros/latex/base/ltfinal.dtx index fafd0c6912..7f4bef3bcc 100644 --- a/macros/latex/base/ltfinal.dtx +++ b/macros/latex/base/ltfinal.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltfinal.dtx} - [2022/07/05 v2.2w LaTeX Kernel (Final Settings)] + [2022/10/26 v2.2x LaTeX Kernel (Final Settings)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltfinal.dtx} @@ -1085,6 +1085,9 @@ % \changes{v2.2t}{2022/04/21}{Support \cs{noexpand} in argument of \cs{@expl@text@uppercase@@n}} % \changes{v2.2v}{2022/06/30}{Just use \cs{text_lowercase:n} without \cs{protectd@edf} gh/881x}% % \changes{v2.2w}{2022/07/04}{Introduced \cs{CaseSwitch}, \cs{DeclareCaseChangeEquivalent} and \cs{MakeTitlecase} to support hooking into case changing gh/889}% +% \changes{v2.2x}{2022/10/26}{Introduce optional argument for case-changing commands} +% \changes{v2.2x}{2022/10/26}{Make case changing commands language-aware} +% \changes{v2.2x}{2022/10/26}{Auto-detect \pkg{babel} locale} % Wrappers around the L3 case changing functions. % |\protected| to make them mostly safe as replacements for |uppercase| % and |\lowercase|. @@ -1103,18 +1106,61 @@ % In order to get round this, we redefine |\MakeUppercase| and % |\MakeLowercase| to grab their argument and brace it. % -% Earlier versions needed to procsss |\@uclclist| in an |\edef| +% Earlier versions needed to process |\@uclclist| in an |\edef| % to handle legacy input encodings, but recent (2022) expl3 versions % handle non-UTF8 text natively so we simply call the |\text_...case:n| % functions. % \begin{macrocode} \ExplSyntaxOn -\cs_new_protected_nopar:cpn{MakeUppercase~}{\text_uppercase:n} -\cs_set_nopar:Npx\MakeUppercase#1{\use:c{MakeUppercase~}{#1}} -\cs_new_protected_nopar:cpn{MakeLowercase~}{\text_lowercase:n} -\cs_set_nopar:Npx\MakeLowercase#1{\use:c{MakeLowercase~}{#1}} -\cs_new_protected_nopar:cpn{MakeTitlecase~}{\text_titlecase:n} -\cs_set_nopar:Npx\MakeTitlecase#1{\use:c{MakeTitlecase~}{#1}} +\keys_define:nn { __kernel } + { + lang .str_set:N = \reserved@a , + locale .str_set:N = \reserved@a + } +\cs_new_protected:Npn \@@text@case@aux #1#2#3 + { + \cs_set_nopar:Npn \reserved@a { } + \tl_if_blank:nTF {#2} + { \@@text@case@aux@ } + { \keys_set:nn { __kernel } {#2} } + \use:c { text_ #1 case:Vn } \reserved@a {#3} + } +\cs_new_protected:Npn \@@text@case@aux@ { } +\tl_gput_right:Nn \@kernel@after@begindocument + { + \@ifpackageloaded { babel } + { + \@ifpackagelater { babel } { 2020-01-15 } + { + \cs_gset_protected:Npn \@@text@case@aux@ + { + \str_set:Nx \reserved@a + { \localeinfo* { tag.bcp47 } } + } + } + { } + } + { } + } +\exp_args_generate:n { cnx } +% \end{macrocode} +% The odd use of \emph{three} spaces here is needed as \pkg{ltcmd} uses the +% name with one and two spaces to give a `friendly' error message for a runaway +% argument: that means we can't use it here. +% \begin{macrocode} +\cs_set_protected:Npn \reserved@a #1 + { + \cs_generate_variant:cn { text_ \str_lowercase:n {#1} case:nn } { V } + \cs_new_protected:cpx { Make#1case \c_space_tl \c_space_tl \c_space_tl } [##1] ##2 + { \exp_not:N \@@text@case@aux { \str_lowercase:n {#1} } {##1} {##2} } + \ExpandArgs { cnx } \NewExpandableDocumentCommand + { Make#1case } + { O{} +m } + { \exp_not:c { Make#1case \c_space_tl \c_space_tl \c_space_tl } [####1] {####2} } + } +\reserved@a { Upper } +\reserved@a { Lower } +\reserved@a { Title } % \end{macrocode} % % \changes{v2.2u}{2022/06/02}{Add \cs{NoCaseChange}} diff --git a/macros/latex/base/ltfssdcl.dtx b/macros/latex/base/ltfssdcl.dtx index dd9f12f802..49041605e9 100644 --- a/macros/latex/base/ltfssdcl.dtx +++ b/macros/latex/base/ltfssdcl.dtx @@ -36,7 +36,7 @@ % % \ProvidesFile{ltfssdcl.dtx} - [2022/07/04 v3.0z LaTeX Kernel (NFSS Declarative Interface)] + [2022/09/20 v3.1b LaTeX Kernel (NFSS Declarative Interface)] % \iffalse \documentclass{ltxdoc} \begin{document} @@ -457,7 +457,7 @@ % % % -% \begin{macro}{\c@localalphabets} +% \begin{macro}{\c@localmathalphabets} % \changes{v3.0x}{2021/09/26}{Counter added for (gh/676)} % To avoid hitting the ``no more math fams available'' limit of 16, we % keep a defined number of math alphabets flexible/local. If we have to @@ -577,118 +577,6 @@ } % \end{macrocode} % -% -% -% \begin{macro}{\freeze@math@version} -% \changes{v3.0x}{2021/09/26}{Macro added for (gh/676)} -% This command stores the current state of the math version and sets -% things up to return to it after each formula from now on. We use -% L3 programming layer code to set it up. -% \begin{macrocode} -\ExplSyntaxOn -\cs_new_protected:Npn\freeze@math@version #1 { -% \end{macrocode} -% Save the current \cs{mv@\meta{version}} code and the number of -% allocated mathgroups inside. -% \begin{macrocode} - \@font@info{Freeze~ math~ alphabet~ allocation~ in~ version~ - #1.\MessageBreak - Allocated~math~groups:~\int_use:c{ c@mv@ #1 }~ - (local:~ \int_use:N\c@localmathalphabets) } - \cs_gset_eq:cc { mv@#1@frozen }{ mv@#1 } - \tl_gset:cx { g__nfss_frozen_mv_ #1 _tl }{ \int_use:c { c@mv@#1 } } -% \end{macrocode} -% Doing the reset the first time, we wait until we are out of -% math mode, so we use some recursive \cs{group_insert_after:N} for this -% before we execute \cs{mv@\meta{version}@reset}. -% \begin{macrocode} - \group_insert_after:N \__nfss_init_mv_freeze:N - \exp_after:wN \group_insert_after:N \cs:w mv@#1@reset \cs_end: -% \end{macrocode} -% The \cs{check@mathfonts} is called at the very beginning of each -% math formula, so it is a good way to hook in the resetting. -% Again that has to happen after the formula has ended, but we know -% because of the place where \cs{check@mathfonts} is used -% that a single \cs{aftergoup} is sufficient. -% \begin{macrocode} - \tl_gput_right:No \check@mathfonts - { - \exp_after:wN \group_insert_after:N \cs:w mv@#1@reset \cs_end: - } -% \end{macrocode} -% Here is the definition of \cs{mv@\meta{version}@reset}. If there -% has been no new math alphabet allocation, doing a reset would -% just cause a lot of unnecessary processing, so we do a quick -% check upfront for this. -% \begin{macrocode} - \cs_gset:cpn{mv@#1@reset} - { - \int_compare:nNnTF { \int_use:c{c@mv@#1} } > - { \tl_use:c{g__nfss_frozen_mv_ #1 _tl} } - { - \@font@info{Undo~ math~ alphabet~ allocation~ in~ version~ #1} -% \end{macrocode} -% If the undo is necessary, we restore the \cs{mv@\meta{version}} code. -% \begin{macrocode} - \cs_gset_eq:cc { mv@#1 }{ mv@#1@frozen } - \int_gset:cn { c@mv@#1 }{ \tl_use:c {g__nfss_frozen_mv_ #1 _tl} } -% \end{macrocode} -% But we also should undo changes to the math alphabet -% definitions. We therefore run this code with a modified -% definition for \cs{getanddefine@fonts} because there is no need -% to do anything to the symbol fonts that are permanently allocated. -% \begin{macrocode} - \group_begin: - \cs_set_eq:NN \getanddefine@fonts \use_none:nn - \use:c {mv@#1} - \group_end: - } - { -% \end{macrocode} -% If there was no change, we report that in the log (but this -% branch could go completely). -% \begin{macrocode} - \@font@info{No~ math~ alphabet~ change~ to~ frozen~ version~ #1} - } -% \end{macrocode} -% If this is executed after a math display, we may have to arrange -% for ignoring spaces, because they are now hidden if -% the tokens from above intervene. This is signaled by the 2e -% switch \texttt{@ignore} which is set in \cs{frozen@everymath} and -% \cs{frozen@everydisplay}. -% -% This is all 2e code so we use that syntax. -% \changes{v3.0z}{2022/07/04}{Ignore spaces if necessary (gh/886)} -% \begin{macrocode} - \if@ignore \ignorespaces \fi - } -} -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\__nfss_init_mv_freeze:N} -% \changes{v3.0x}{2021/09/26}{Macro added for (gh/676)} -% To do the initial freeze in a safe place, we check if we are in -% math mode and if so try again after the group has ended by pushing -% the command and its single token argument with two -% \cs{group_insert_after:N}s after the current group. If we are no longer in -% math mode we bypass the -% conditional and so the next token is our argument -% which is then finally executed. -% \begin{macrocode} -\cs_new_protected:Npn \__nfss_init_mv_freeze:N #1 {% - \mode_if_math:T { \group_insert_after:N \__nfss_init_mv_freeze:N - \group_insert_after:N } #1 -} -% \end{macrocode} -% \end{macro} -% -% -% \begin{macrocode} -\ExplSyntaxOff -% \end{macrocode} -% % \begin{macrocode} % %\EndIncludeInRelease @@ -786,7 +674,132 @@ %\EndIncludeInRelease %<*2ekernel> % \end{macrocode} -% \end{macro} +% \end{macro} +% +% +% +% +% \begin{macro}{\freeze@math@version} +% \changes{v3.0x}{2021/09/26}{Macro added for (gh/676)} +% \changes{v3.1a}{2022/09/17}{New logic for freezing math versions (gh/921)} +% This command stores the current state of the math version and sets +% things up to return to it after each formula from now on. We use +% L3 programming layer code to set it up. +% \begin{macrocode} +% +%<*2ekernel|latexrelease> +%\IncludeInRelease{2022/11/01}% +% {\freeze@math@version}{freeze math version}% +\ExplSyntaxOn +\cs_new_protected:Npn\freeze@math@version #1 { +% \end{macrocode} +% Save the current \cs{mv@\meta{version}} code and the number of +% allocated mathgroups inside. +% \begin{macrocode} + \@font@info{Freeze~ math~ alphabet~ allocation~ in~ version~ + #1.\MessageBreak + Allocated~math~groups:~\int_use:c{ c@mv@ #1 }~ + (local:~ \int_use:N\c@localmathalphabets) } + \cs_gset_eq:cc { mv@#1@frozen }{ mv@#1 } + \tl_gset:cx { g__nfss_frozen_mv_ #1 _tl }{ \int_use:c { c@mv@#1 } } +% \end{macrocode} +% Here is the definition of \cs{mv@\meta{version}@reset}. If there +% has been no new math alphabet allocation, doing a reset would +% just cause a lot of unnecessary processing, so we do a quick +% check upfront for this. +% \begin{macrocode} + \cs_gset:cpn{mv@#1@reset} + { + \int_compare:nNnTF { \int_use:c{c@mv@#1} } > + { \tl_use:c{g__nfss_frozen_mv_ #1 _tl} } + { + \@font@info{Undo~ math~ alphabet~ allocation~ in~ version~ #1} +% \end{macrocode} +% If the undo is necessary, we restore the \cs{mv@\meta{version}} code. +% \begin{macrocode} + \cs_gset_eq:cc { mv@#1 }{ mv@#1@frozen } + \int_gset:cn { c@mv@#1 }{ \tl_use:c {g__nfss_frozen_mv_ #1 _tl} } +% \end{macrocode} +% But we also should undo changes to the math alphabet +% definitions. We therefore run this code with a modified +% definition for \cs{getanddefine@fonts} because there is no need +% to do anything to the symbol fonts that are permanently allocated. +% \begin{macrocode} + \group_begin: + \cs_set_eq:NN \getanddefine@fonts \use_none:nn + \use:c {mv@#1} + \group_end: + } + { +% \end{macrocode} +% If there was no change, we report that in the log (but this +% branch could go completely). +% \begin{macrocode} + \@font@info{No~ math~ alphabet~ change~ to~ frozen~ version~ #1} + } +% \end{macrocode} +% If this is executed after a math display, we may have to arrange +% for ignoring spaces, because they are now hidden if +% the tokens from above intervene. This is signaled by the 2e +% switch \texttt{@ignore} which is set in \cs{frozen@everymath} and +% \cs{frozen@everydisplay}. +% +% This is all 2e code so we use that syntax. +% \changes{v3.0z}{2022/07/04}{Ignore spaces if necessary (gh/886)} +% \begin{macrocode} + \if@ignore \ignorespaces \fi + } +} +\ExplSyntaxOff +% +%\EndIncludeInRelease +%\IncludeInRelease{2021/11/15} +% {\freeze@math@version}{freeze math version}% +% +%\ExplSyntaxOn +%\cs_set_protected:Npn\freeze@math@version #1 { +% \@font@info{Freeze~ math~ alphabet~ allocation~ in~ version~ +% #1.\MessageBreak +% Allocated~math~groups:~\int_use:c{ c@mv@ #1 }~ +% (local:~ \int_use:N\c@localmathalphabets) } +% \cs_gset_eq:cc { mv@#1@frozen }{ mv@#1 } +% \tl_gset:cx { g__nfss_frozen_mv_ #1 _tl }{ \int_use:c { c@mv@#1 } } +% \group_insert_after:N \__nfss_init_mv_freeze:N +% \exp_after:wN \group_insert_after:N \cs:w mv@#1@reset \cs_end: +% \tl_gput_right:No \check@mathfonts +% { +% \exp_after:wN \group_insert_after:N \cs:w mv@#1@reset \cs_end: +% } +% \cs_gset:cpn{mv@#1@reset} +% { +% \int_compare:nNnTF { \int_use:c{c@mv@#1} } > +% { \tl_use:c{g__nfss_frozen_mv_ #1 _tl} } +% { +% \@font@info{Undo~ math~ alphabet~ allocation~ in~ version~ #1} +% \cs_gset_eq:cc { mv@#1 }{ mv@#1@frozen } +% \int_gset:cn { c@mv@#1 }{ \tl_use:c {g__nfss_frozen_mv_ #1 _tl} } +% \group_begin: +% \cs_set_eq:NN \getanddefine@fonts \use_none:nn +% \use:c {mv@#1} +% \group_end: +% } +% { +% \@font@info{No~ math~ alphabet~ change~ to~ frozen~ version~ #1} +% } +% \if@ignore \ignorespaces \fi +% } +%} +%\cs_set_protected:Npn \__nfss_init_mv_freeze:N #1 {% +% \mode_if_math:T { \group_insert_after:N \__nfss_init_mv_freeze:N +% \group_insert_after:N } #1 +%} +%\ExplSyntaxOff +% +%\EndIncludeInRelease +%<*2ekernel> +% \end{macrocode} +% \end{macro} +% % % \begin{macro}{\process@table} % \begin{macrocode} @@ -868,7 +881,7 @@ % \begin{macrocode} % %<*2ekernel|latexrelease> -%\IncludeInRelease{2021/11/15}% +%\IncludeInRelease{2022/11/01}% % {\DeclareMathVersion}{local alphabets}% \def\DeclareMathVersion#1{% % \end{macrocode} @@ -881,6 +894,21 @@ % \begin{macrocode} \@namedef{g__nfss_frozen_mv_#1_tl}{}% % \end{macrocode} +% We also extend \cs{check@mathfonts} to call a version reset (once +% frozen) after a formula has finished. +% \changes{v3.1a}{2022/09/17}{New logic for freezing math versions (gh/921)} +% \begin{macrocode} + \expandafter\ifx\csname mv@#1\endcsname \relax + \expandafter \g@addto@macro \expandafter \check@mathfonts + \expandafter {\expandafter \aftergroup \csname mv@#1@reset\endcsname}% +% \end{macrocode} +% Initially this macro does nothing. It is, however, important that +% it doesn't stop any \cs{ignorespaces}, so we make it expandable +% and not \cs{relax}. +% \begin{macrocode} + \@namedef{mv@#1@reset}{}% + \fi +% \end{macrocode} % % \begin{macrocode} \expandafter\new@mathversion\csname mv@#1\endcsname} @@ -890,6 +918,12 @@ % \end{macrocode} % % \begin{macrocode} +%\IncludeInRelease{2021/11/15}% +% {\DeclareMathVersion}{local alphabets}% +%\def\DeclareMathVersion#1{% +% \@namedef{g__nfss_frozen_mv_#1_tl}{}% +% \expandafter\new@mathversion\csname mv@#1\endcsname} +%\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% % {\DeclareMathVersion}{local alphabets}% %\def\DeclareMathVersion#1{% @@ -963,8 +997,24 @@ % \end{macro} % % \begin{macro}{\DeclareSymbolFont} +% First drop any surplus \texttt{m} from the series argument then +% do what has been done since 1994. +% \changes{v3.1b}{2022/09/20}{Drop any surplus 'm' in series argument (gh/918)} % \begin{macrocode} -\def\DeclareSymbolFont#1#2#3#4#5{% +% +%<*2ekernel|latexrelease> +%\IncludeInRelease{2022/11/01}% +% {\DeclareSymbolFont}{maybe drop m}% +\def\DeclareSymbolFont #1#2#3#4#5{% + \def\reserved@a{\DeclareSymbolFont@m@dropped{#1}{#2}{#3}}% + \edef\reserved@b{#4}% + \series@maybe@drop@one@m\reserved@b\reserved@b + \expandafter\reserved@a\expandafter{\reserved@b}{#5}% +} +% \end{macrocode} +% +% \begin{macrocode} +\def\DeclareSymbolFont@m@dropped #1#2#3#4#5{% \@tempswafalse \edef\reserved@b{#2}% \def\cdp@elt##1##2##3##4{\def\reserved@c{##1}% @@ -1018,6 +1068,16 @@ \fi } \@onlypreamble\DeclareSymbolFont +% +%\EndIncludeInRelease +%\IncludeInRelease{0000/00/00}% +% {\DeclareSymbolFont}{maybe drop m}% +% +%\let\DeclareSymbolFont\DeclareSymbolFont@m@dropped +%\let\DeclareSymbolFont@m@dropped\@undefined +% +%\EndIncludeInRelease +%<*2ekernel> % \end{macrocode} % \end{macro} % @@ -1054,8 +1114,24 @@ % \end{macro} % % \begin{macro}{\SetSymbolFont} +% First drop any surplus \texttt{m} from the series argument then +% do what has been done since 1994. +% \changes{v3.1b}{2022/09/20}{Drop any surplus 'm' in series argument (gh/918)} % \begin{macrocode} -\def\SetSymbolFont#1#2#3#4#5#6{% +% +%<*2ekernel|latexrelease> +%\IncludeInRelease{2022/11/01}% +% {\SetSymbolFont}{maybe drop m}% +\def\SetSymbolFont #1#2#3#4#5#6{% + \def\reserved@a{\SetSymbolFont@m@dropped{#1}{#2}{#3}{#4}}% + \edef\reserved@b{#5}% + \series@maybe@drop@one@m\reserved@b\reserved@b + \expandafter\reserved@a\expandafter{\reserved@b}{#6}% +} +% \end{macrocode} +% +% \begin{macrocode} +\def\SetSymbolFont@m@dropped#1#2#3#4#5#6{% \@tempswafalse \edef\reserved@b{#3}% \def\cdp@elt##1##2##3##4{\def\reserved@c{##1}% @@ -1070,6 +1146,16 @@ \fi } \@onlypreamble\SetSymbolFont +% +%\EndIncludeInRelease +%\IncludeInRelease{0000/00/00}% +% {\SetSymbolFont}{maybe drop m}% +% +%\let\SetSymbolFont\SetSymbolFont@m@dropped +%\let\SetSymbolFont@m@dropped\@undefined +% +%\EndIncludeInRelease +%<*2ekernel> % \end{macrocode} % \end{macro} % diff --git a/macros/latex/base/lthooks-code.pdf b/macros/latex/base/lthooks-code.pdf index 250950b91c..aacbd95c9d 100644 Binary files a/macros/latex/base/lthooks-code.pdf and b/macros/latex/base/lthooks-code.pdf differ diff --git a/macros/latex/base/lthooks-doc.pdf b/macros/latex/base/lthooks-doc.pdf index ae0db8168a..ceddafad9f 100644 Binary files a/macros/latex/base/lthooks-doc.pdf and b/macros/latex/base/lthooks-doc.pdf differ diff --git a/macros/latex/base/ltkeys.dtx b/macros/latex/base/ltkeys.dtx index 3de2a0582f..edf12f7cb2 100644 --- a/macros/latex/base/ltkeys.dtx +++ b/macros/latex/base/ltkeys.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltkeys.dtx} - [2022/07/05 v1.0i LaTeX Kernel (Kevyal options)] + [2022/10/22 v1.0l LaTeX Kernel (Keyval options)] % \iffalse \documentclass{l3doc} \GetFileInfo{ltkeys.dtx} @@ -72,6 +72,7 @@ % \begin{itemize} % \item \texttt{.code} --- execute arbitrary code % \item \texttt{.if} --- sets a \TeX{} \cs{if...} switch +% \item \texttt{.ifnot} --- sets an inverted \TeX{} \cs{if...} switch % \item \texttt{.store} --- stores a value in a macro % \item \texttt{.usage} -- defines whether the option can be given only % when loading (\texttt{load}), in the preamble (\texttt{preamble}) or @@ -152,11 +153,13 @@ % % \subsection{Key properties} % -% \begin{macro}{.code, .if, .store, .usage} +% \begin{macro}{.code, .if, .ifnot, .store, .usage} % \changes{v1.0b}{2022/02/05} % {Create properties in \texttt{ltlkeys}} % \changes{v1.0c}{2022/02/07} % {Correct \texttt.{.code} property} +% \changes{v1.0i}{2022/06/22} +% {Add \texttt.{.notif} property} % \begin{macrocode} \group_begin: \cs_set_protected:Npn \@@_tmp:nn #1#2 @@ -170,6 +173,7 @@ \@@_tmp:nn { code:n } { code } { legacy_if_set:n } { if } + { legacy_if_set_inverse:n } { ifnot } { tl_set:N } { store } { usage:n } { usage } { \q_recursion_tail } { } @@ -205,6 +209,8 @@ % \begin{macro}{\@@_options_aux:n} % \changes{v1.0b}{2022/01/15} % {Clear option list in end-of-package hook} +% \changes{v1.0l}{2022/10/20} +% {Define key option handler in \pkg{ltkeys}} % \changes{v1.0i}{2022/07/05}{Support \cs{CurrentOption}} % \begin{macro}{\@@_options_end:} % The main function calls functions to collect up the global and local @@ -221,7 +227,8 @@ { \@@_options_expand_module:Nn \@@_options_aux:n {#1} } \cs_new_protected:Npn \@@_options_aux:n #1 { - \cs_gset_nopar:cpn { opt@fam@\@currname.\@currext } {#1} + \cs_gset_protected:cpn { opt@handler@\@currname.\@currext } + { \ProcessKeyOptions [ #1 ] } \cs_set_protected:Npn \@@_option_end: { } \clist_clear:N \l_@@_options_clist \@@_options_global:n {#1} @@ -247,11 +254,15 @@ \@@_option_end: \@@_options_loaded:n {#1} } +% \end{macrocode} +% \changes{v1.0j}{2022/07/23} +% {Output `public' package name in messages} +% \begin{macrocode} \msg_new:nnnn { keys } { option-unknown } { Unknown~option~'#1'~for~package~#2. } { LaTeX~has~been~asked~to~set~an~option~called~'#1'~ - but~the~#2~package~has~not~created~an~option~with~this~name. + but~the~package~"\msg_module_name:n {#2}"~has~not~created~an~option~with~this~name. } % \end{macrocode} % \end{macro} @@ -286,6 +297,7 @@ % \begin{macro}{\@@_options_class:nnn} % \changes{v1.0h}{2022/06/20}{New function} % \changes{v1.0i}{2022/07/05}{Correct naming of raw class options storage} +% \changes{v1.0l}{2022/10/22}{Correct handling of unused option list} % For classes, each option (stripped of any content after |=|) % is checked for existence as a key. If found, the option is added to % the combined list for processing. On the other hand, unused options @@ -315,11 +327,12 @@ \cs_new_protected:Npn \@@_options_class:nnn #1#2#3 { \keys_if_exist:nnTF {#3} {#1} - { \clist_put_right:Nn \l_@@_options_clist {#2} } { - \str_if_eq:eeF - { \exp_not:v { @raw@opt@ \@currname . \@currext } } - { \exp_not:V \@raw@classoptionslist } + \clist_put_right:Nn \l_@@_options_clist {#2} + \clist_remove_all:Nn \@unusedoptionlist {#1} + } + { + \clist_if_in:NnF \@unusedoptionlist {#1} { \clist_put_right:Nn \@unusedoptionlist {#1} } } } @@ -467,6 +480,7 @@ % % \begin{macro}{\@@_options_loaded:n} % \begin{macro}{\@@_options_loaded:nn} +% \changes{v1.0l}{2022/10/20}{Correct an argument for a message} % Indicates that the load-time options for a package have been processed: % once this has happened, make them unavailable either with a warning or % an error. @@ -488,19 +502,33 @@ \cs_new_protected:Npn \@@_options_loaded:nn #1#2 { \bool_if:NTF \l_@@_options_loading_bool - { - \msg_warning:nnxx { keys } { load-option-ignored } - { \use:c { opt@fam@\@currname.\@currext } } {#2} - } - { \msg_error:nnnn { keys } { load-only } {#1} {#2} } + { \msg_warning:nnnn { keys } { load-option-ignored } } + { \msg_error:nnnn { keys } { load-only } } + {#1} {#2} } +% \end{macrocode} +% \changes{v1.0j}{2022/07/23} +% {Output `public' package name in messages} +% \begin{macrocode} \msg_new:nnn { keys } { load-option-ignored } - { Package~"#1"~has~already~been~loaded:~ignoring~load-time~option~"#2". } + { + Package~"\msg_module_name:n {#1}"~has~already~been~loaded:~ + ignoring~load-time~option~"#2". + } +% \end{macrocode} +% \changes{v1.0j}{2022/07/23} +% {Output `public' package name in messages} +% \changes{v1.0k}{2022/08/21} +% {Correct error message} +% \begin{macrocode} \msg_new:nnnn { keys } { load-only } - { Key~"#2"~may~only~be~used~in~the~during~loading~of~package~"#1". } + { + Key~"#2"~may~only~be~used~during~loading~of~package~ + "\msg_module_name:n {#1}". + } { LaTeX~was~asked~to~set~a~key~called~"#2",~but~this~is~only~allowed~ - in~the~optional~argument~when~loading~package~"#1". + in~the~optional~argument~when~loading~package~"\msg_module_name:n{#1}". } % \end{macrocode} % \end{macro} diff --git a/macros/latex/base/ltluatex.dtx b/macros/latex/base/ltluatex.dtx index 18623fd677..6c66a96be0 100644 --- a/macros/latex/base/ltluatex.dtx +++ b/macros/latex/base/ltluatex.dtx @@ -28,7 +28,7 @@ \ProvidesFile{ltluatex.dtx} % %<*tex> -[2021/12/27 v1.1x +[2022/10/03 v1.2a % % LuaTeX support for plain TeX (core) %<*tex> @@ -380,7 +380,7 @@ % % \noindent % \DescribeMacro{create_callback} -% |luatexbase.create_callback(|\meta{name},meta{type},\meta{default}|)| +% |luatexbase.create_callback(|\meta{name},\meta{type},\meta{default}|)| % Defines a user defined callback. The last argument is a default % function or |false|. % @@ -389,6 +389,34 @@ % |luatexbase.call_callback(|\meta{name},\ldots|)| % Calls a user defined callback with the supplied arguments. % +% \noindent +% \DescribeMacro{declare_callback_rule} +% |luatexbase.declare_callback_rule(|\meta{name}, \meta{first}, \meta{relation}, \meta{second}|)| +% Adds an ordering constraint between two callback functions for callback \meta{name}. +% +% The kind of constraint added depends on \meta{relation}: +% \begin{description} +% \item[before] The callback function with description \meta{first} will be +% executed before the function with description \meta{second}. +% \item[after] The callback function with description \meta{first} will be +% executed after the function with description \meta{second}. +% \item[incompatible-warning] When both a callback function with description \meta{first} +% and with description \meta{second} is registered, then a warning is printed when +% the callback is executed. +% \item[incompatible-error] When both a callback function with description \meta{first} +% and with description \meta{second} is registered, then an error is printed when +% the callback is executed. +% \item[unrelated] Any previously declared callback rule between \meta{first} +% and \meta{second} gets disabled. +% \end{description} +% Every call to \texttt{declare_callback_rule} with a specific callback \meta{name} +% and descriptions \meta{first} and \meta{second} overwrites all previous calls with +% same callback and descriptions. +% +% The callback functions do not have to be registered yet when the functions is called. +% Ony the constraints for which both callback descriptions refer to callbacks +% registered at the time the callback is called will have an effect. +% % \endgroup % % \MaybeStop{} @@ -1288,8 +1316,120 @@ luatexbase.new_luafunction = new_luafunction % actual function as |func| and the identifying description as |description|. % Only callbacks with a non-empty list of functions have an entry in this % list. -% \begin{macrocode} -local callbacklist = callbacklist or { } +% +% Actually there are two tables: |realcallbacklist| directly contains the entries +% as described above while |callbacklist| only directly contains the already sorted +% entries. Other entries can be queried through |callbacklist| too which triggers a +% resort. +% +% Additionally |callbackrules| describes the ordering constraints: It contains two +% element tables with the descriptions of the constrained callback implementations. +% It can additionally contain a |type| entry indicating the kind of rule. A missing +% value indicates a normal ordering contraint. +% +% \changes{v1.2a}{2022/10/03}{Add rules for callback ordering} +% \begin{macrocode} +local realcallbacklist = {} +local callbackrules = {} +local callbacklist = setmetatable({}, { + __index = function(t, name) + local list = realcallbacklist[name] + local rules = callbackrules[name] + if list and rules then + local meta = {} + for i, entry in ipairs(list) do + local t = {value = entry, count = 0, pos = i} + meta[entry.description], list[i] = t, t + end + local count = #list + local pos = count + for i, rule in ipairs(rules) do + local rule = rules[i] + local pre, post = meta[rule[1]], meta[rule[2]] + if pre and post then + if rule.type then + if not rule.hidden then + assert(rule.type == 'incompatible-warning' and luatexbase_warning + or rule.type == 'incompatible-error' and luatexbase_error)( + "Incompatible functions \"" .. rule[1] .. "\" and \"" .. rule[2] + .. "\" specified for callback \"" .. name .. "\".") + rule.hidden = true + end + else + local post_count = post.count + post.count = post_count+1 + if post_count == 0 then + local post_pos = post.pos + if post_pos ~= pos then + local new_post_pos = list[pos] + new_post_pos.pos = post_pos + list[post_pos] = new_post_pos + end + list[pos] = nil + pos = pos - 1 + end + pre[#pre+1] = post + end + end + end + for i=1, count do -- The actual sort begins + local current = list[i] + if current then + meta[current.value.description] = nil + for j, cur in ipairs(current) do + local count = cur.count + if count == 1 then + pos = pos + 1 + list[pos] = cur + else + cur.count = count - 1 + end + end + list[i] = current.value + else + -- Cycle occured. TODO: Show cycle for debugging + -- list[i] = ... + local remaining = {} + for name, entry in next, meta do + local value = entry.value + list[#list + 1] = entry.value + remaining[#remaining + 1] = name + end + table.sort(remaining) + local first_name = remaining[1] + for j, name in ipairs(remaining) do + local entry = meta[name] + list[i + j - 1] = entry.value + for _, post_entry in ipairs(entry) do + local post_name = post_entry.value.description + if not remaining[post_name] then + remaining[post_name] = name + end + end + end + local cycle = {first_name} + local index = 1 + local last_name = first_name + repeat + cycle[last_name] = index + last_name = remaining[last_name] + index = index + 1 + cycle[index] = last_name + until cycle[last_name] + local length = index - cycle[last_name] + 1 + table.move(cycle, cycle[last_name], index, 1) + for i=2, length//2 do + cycle[i], cycle[length + 1 - i] = cycle[length + 1 - i], cycle[i] + end + error('Cycle occured at ' .. table.concat(cycle, ' -> ', 1, length)) + end + end + end + realcallbacklist[name] = list + t[name] = list + return list + end +}) % \end{macrocode} % % Numerical codes for callback types, and name-to-value association (the @@ -1398,9 +1538,7 @@ local callbacktypes = callbacktypes or { ligaturing = simple, kerning = simple, insert_local_par = simple, - pre_mlist_to_hlist_filter = list, - mlist_to_hlist = exclusive, - post_mlist_to_hlist_filter = reverselist, +% mlist_to_hlist = exclusive, new_graf = exclusive, % \end{macrocode} % Section 8.5: information reporting callbacks. @@ -1461,6 +1599,30 @@ local callbacktypes = callbacktypes or { luatexbase.callbacktypes=callbacktypes % \end{macrocode} % +% \changes{v1.1y}{2022/08/13}{shared\_callbacks added} +% Sometimes multiple callbacks correspond to a single underlying engine level callback. +% Then the engine level callback should be registered as long as at least one of these +% callbacks is in use. This is implemented though a shared table which counts how many +% of the involved callbacks are currently in use. The enging level callback is registered +% iff this count is not 0. +% +% We add |mlist_to_hlist| directly to the list to demonstrate this, but the handler gets +% added later when it is actually defined. +% +% All callbacks in this list are treated as user defined callbacks. +% +% \begin{macrocode} +local shared_callbacks = { + mlist_to_hlist = { + callback = "mlist_to_hlist", + count = 0, + handler = nil, + }, +} +shared_callbacks.pre_mlist_to_hlist_filter = shared_callbacks.mlist_to_hlist +shared_callbacks.post_mlist_to_hlist_filter = shared_callbacks.mlist_to_hlist +% \end{macrocode} +% % \begin{macro}{callback.register} % \changes{v1.0a}{2015/09/24}{Function modified} % Save the original function for registering callbacks and prevent the @@ -1639,11 +1801,7 @@ local defaults = { % If a default function is not required, it may be declared as |false|. % First we need a list of user callbacks. % \begin{macrocode} -local user_callbacks_defaults = { - pre_mlist_to_hlist_filter = list_handler_default, - mlist_to_hlist = node.mlist_to_hlist, - post_mlist_to_hlist_filter = list_handler_default, -} +local user_callbacks_defaults = {} % \end{macrocode} % % \begin{macro}{create_callback} @@ -1713,6 +1871,7 @@ luatexbase.call_callback=call_callback % \changes{v1.0a}{2015/09/24}{Function added} % Add a function to a callback. First check arguments. % \changes{v1.0k}{2015/12/02}{Give more specific error messages (PHG)} +% \changes{v1.2a}{2022/10/03}{Add rules for callback ordering} % \begin{macrocode} local function add_to_callback(name, func, description) if not name or name == "" then @@ -1733,18 +1892,29 @@ local function add_to_callback(name, func, description) % Then test if this callback is already in use. If not, initialise its list % and register the proper handler. % \begin{macrocode} - local l = callbacklist[name] + local l = realcallbacklist[name] if l == nil then l = { } - callbacklist[name] = l + realcallbacklist[name] = l +% \end{macrocode} +% \changes{v1.1y}{2022/08/13}{Adapted code for shared\_callbacks} +% Handle count for shared engine callbacks. +% \begin{macrocode} + local shared = shared_callbacks[name] + if shared then + shared.count = shared.count + 1 + if shared.count == 1 then + callback_register(shared.callback, shared.handler) + end % \end{macrocode} % If it is not a user defined callback use the primitive callback register. % \begin{macrocode} - if user_callbacks_defaults[name] == nil then + elseif user_callbacks_defaults[name] == nil then callback_register(name, handlers[callbacktypes[name]](name)) end end % \end{macrocode} +% \changes{v1.2a}{2022/10/03}{Add rules for callback ordering} % Actually register the function and give an error if more than one % |exclusive| one is registered. % \begin{macrocode} @@ -1752,7 +1922,6 @@ local function add_to_callback(name, func, description) func = func, description = description, } - local priority = #l + 1 if callbacktypes[name] == exclusive then if #l == 1 then luatexbase_error( @@ -1760,24 +1929,76 @@ local function add_to_callback(name, func, description) name .. "'") end end - table.insert(l, priority, f) + table.insert(l, f) + callbacklist[name] = nil % \end{macrocode} % Keep user informed. % \begin{macrocode} luatexbase_log( - "Inserting `" .. description .. "' at position " - .. priority .. " in `" .. name .. "'." + "Inserting `" .. description .. "' in `" .. name .. "'." ) end luatexbase.add_to_callback = add_to_callback % \end{macrocode} % \end{macro} % +% \begin{macro}{declare_callback_rule} +% \changes{v1.2a}{2022/10/03}{Add function} +% Add an ordering constraint between two callback implementations +% \begin{macrocode} +local function declare_callback_rule(name, desc1, relation, desc2) + if not callbacktypes[name] or + not desc1 or not desc2 or + desc1 == "" or desc2 == "" then + luatexbase_error( + "Unable to create ordering constraint. " + .. "Correct usage:\n" + .. "declare_callback_rule(, , )" + ) + end + if relation == 'before' then + relation = nil + elseif relation == 'after' then + desc2, desc1 = desc1, desc2 + relation = nil + elseif relation == 'incompatible-warning' or relation == 'incompatible-error' then + elseif relation == 'unrelated' then + else + luatexbase_error( + "Unknown relation type in declare_callback_rule" + ) + end + callbacklist[name] = nil + local rules = callbackrules[name] + if rules then + for i, rule in ipairs(rules) do + if rule[1] == desc1 and rule[2] == desc2 or rule[1] == desc2 and rule[2] == desc1 then + if relation == 'unrelated' then + table.remove(rules, i) + else + rule[1], rule[2], rule.type = desc1, desc2, relation + end + return + end + end + if relation ~= 'unrelated' then + rules[#rules + 1] = {desc1, desc2, type = relation} + end + elseif relation ~= 'unrelated' then + callbackrules[name] = {{desc1, desc2, type = relation}} + end +end +luatexbase.declare_callback_rule = declare_callback_rule +% \end{macrocode} +% \end{macro} +% % \begin{macro}{remove_from_callback} % \changes{v1.0a}{2015/09/24}{Function added} % \changes{v1.0k}{2015/12/02}{adjust initialization of cb local (PHG)} % \changes{v1.0k}{2015/12/02}{Give more specific error messages (PHG)} % \changes{v1.1m}{2020/03/07}{Do not call callback.register for user-defined callbacks} +% \changes{v1.1y}{2022/08/13}{Adapted code for shared\_callbacks} +% \changes{v1.2a}{2022/10/03}{Add rules for callback ordering} % Remove a function from a callback. First check arguments. % \begin{macrocode} local function remove_from_callback(name, description) @@ -1794,7 +2015,7 @@ local function remove_from_callback(name, description) .. "remove_from_callback(, )" ) end - local l = callbacklist[name] + local l = realcallbacklist[name] if not l then luatexbase_error( "No callback list for `" .. name .. "'\n") @@ -1822,8 +2043,15 @@ local function remove_from_callback(name, description) "Removing `" .. description .. "' from `" .. name .. "'." ) if #l == 0 then + realcallbacklist[name] = nil callbacklist[name] = nil - if user_callbacks_defaults[name] == nil then + local shared = shared_callbacks[name] + if shared then + shared.count = shared.count - 1 + if shared.count == 0 then + callback_register(shared.callback, nil) + end + elseif user_callbacks_defaults[name] == nil then callback_register(name, nil) end end @@ -1841,12 +2069,12 @@ luatexbase.remove_from_callback = remove_from_callback local function in_callback(name, description) if not name or name == "" - or not callbacklist[name] + or not realcallbacklist[name] or not callbacktypes[name] or not description then return false end - for _, i in pairs(callbacklist[name]) do + for _, i in pairs(realcallbacklist[name]) do if i.description == description then return true end @@ -1863,7 +2091,7 @@ luatexbase.in_callback = in_callback % this functionality. % \begin{macrocode} local function disable_callback(name) - if(callbacklist[name] == nil) then + if(realcallbacklist[name] == nil) then callback_register(name, false) else luatexbase_error("Callback list for " .. name .. " not empty") @@ -1877,12 +2105,13 @@ luatexbase.disable_callback = disable_callback % \changes{v1.0a}{2015/09/24}{Function added} % \changes{v1.0h}{2015/11/27}{Match test in in-callback latex/4445} % List the descriptions of functions registered for the given callback. +% This will sort the list if necessary. % \begin{macrocode} local function callback_descriptions (name) local d = {} if not name or name == "" - or not callbacklist[name] + or not realcallbacklist[name] or not callbacktypes[name] then return d @@ -1917,10 +2146,14 @@ luatexbase.uninstall = uninstall % \end{macro} % \begin{macro}{mlist_to_hlist} % \changes{v1.1l}{2020/02/02}{|pre/post_mlist_to_hlist| added} +% \changes{v1.1y}{2022/08/13}{Use shared\_callback system for pre/post/mlist_to_hlist} % To emulate these callbacks, the ``real'' |mlist_to_hlist| is replaced by a % wrapper calling the wrappers before and after. % \begin{macrocode} -callback_register("mlist_to_hlist", function(head, display_type, need_penalties) +create_callback('pre_mlist_to_hlist_filter', 'list') +create_callback('mlist_to_hlist', 'exclusive', node.mlist_to_hlist) +create_callback('post_mlist_to_hlist_filter', 'list') +function shared_callbacks.mlist_to_hlist.handler(head, display_type, need_penalties) local current = call_callback("pre_mlist_to_hlist_filter", head, display_type, need_penalties) if current == false then flush_list(head) @@ -1933,7 +2166,7 @@ callback_register("mlist_to_hlist", function(head, display_type, need_penalties) return nil end return post -end) +end % \end{macrocode} % \end{macro} % \endgroup diff --git a/macros/latex/base/ltluatex.pdf b/macros/latex/base/ltluatex.pdf index 145035b41c..de961e8de6 100644 Binary files a/macros/latex/base/ltluatex.pdf and b/macros/latex/base/ltluatex.pdf differ diff --git a/macros/latex/base/ltmarks-code.pdf b/macros/latex/base/ltmarks-code.pdf index c1d9b03a2f..4533a3c4f1 100644 Binary files a/macros/latex/base/ltmarks-code.pdf and b/macros/latex/base/ltmarks-code.pdf differ diff --git a/macros/latex/base/ltmarks-doc.pdf b/macros/latex/base/ltmarks-doc.pdf index 2be35c3b57..3ce8f3780f 100644 Binary files a/macros/latex/base/ltmarks-doc.pdf and b/macros/latex/base/ltmarks-doc.pdf differ diff --git a/macros/latex/base/ltmath.dtx b/macros/latex/base/ltmath.dtx index 1bd979f7de..60394460f5 100644 --- a/macros/latex/base/ltmath.dtx +++ b/macros/latex/base/ltmath.dtx @@ -38,7 +38,7 @@ %<*driver> % \fi \ProvidesFile{ltmath.dtx} - [2022/05/08 v1.2l LaTeX Kernel (Math Setup)] + [2022/09/07 v1.2m LaTeX Kernel (Math Setup)] % \iffalse % % @@ -370,9 +370,39 @@ % \begin{macrocode} \def\makesm@sh#1{% \setbox\z@\hbox{\color@begingroup#1\color@endgroup}\finsm@sh} +% \end{macrocode} +% +% \begin{macrocode} +% +%<*2ekernel|latexrelease> +%\IncludeInRelease{2022/11/01}% +% {\mathsm@sh}{Guard against reboxing}% \def\mathsm@sh#1#2{% - \setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh} + \setbox\z@\hbox{$\m@th#1{#2}$}% +% \end{macrocode} +% The empty brace groups in front of the smashed box (which is +% placed by \cs{finsm@sh}) ensures that a \cs{smash} in math is not +% just producing a single box with its dimensions altered, but a +% box plus this second ord atom. The reason is that \TeX{} sometimes reboxes a +% box if its the only thing in a place like the denominator of a +% fraction. This would then undo the smashing and the additional +% ord atom prevents that. Two ord atoms in a row do not alter the +% horizontal spacing in a formula so this is otherwise transparent. +% \changes{v1.2m}{2022/09/03}{Guard against reboxing in fractions (gh/517)} +% \begin{macrocode} + {}\finsm@sh} % \end{macrocode} +% \begin{macrocode} +% +%\EndIncludeInRelease +%\IncludeInRelease{0000/00/00}% +% {\mathsm@sh}{Guard against reboxing}% +%\def\mathsm@sh#1#2{% +% \setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh} +%\EndIncludeInRelease +%<*2ekernel> +% \end{macrocode} +% % \changes{v1.2b}{2018/09/24}{Start LR-mode if necessary (git/49)} % \begin{macrocode} % diff --git a/macros/latex/base/ltnews.pdf b/macros/latex/base/ltnews.pdf index 034754546d..1f8e4ea789 100644 Binary files a/macros/latex/base/ltnews.pdf and b/macros/latex/base/ltnews.pdf differ diff --git a/macros/latex/base/ltnews.tex b/macros/latex/base/ltnews.tex index cba11c3ce3..8d45f77cda 100644 --- a/macros/latex/base/ltnews.tex +++ b/macros/latex/base/ltnews.tex @@ -1,7 +1,7 @@ % \iffalse meta-comment % % Copyright (C) 2006, 2009, 2011, 2014 Heiko Oberdiek -% Copyright (C) 2014-2021 +% Copyright (C) 2014-2022 % The LaTeX Project and any individual authors listed elsewhere % in this file. % @@ -38,9 +38,9 @@ \NeedsTeXFormat{LaTeX2e} \ProvidesFile{ltnews.tex}% - [2021/11/12 v1.4d Master file for ltnews*.tex (LaTeX Project)] + [2022/06/10 v1.4e Master file for ltnews*.tex (LaTeX Project)] -\providecommand*{\lastissue}{35} +\providecommand*{\lastissue}{36} \InputIfFileExists{ltnews-lastissue.cfg}{}{} diff --git a/macros/latex/base/ltnews01.pdf b/macros/latex/base/ltnews01.pdf index 990d35848d..6e56630f2b 100644 Binary files a/macros/latex/base/ltnews01.pdf and b/macros/latex/base/ltnews01.pdf differ diff --git a/macros/latex/base/ltnews02.pdf b/macros/latex/base/ltnews02.pdf index d6d78abcc1..c3c70a8b5e 100644 Binary files a/macros/latex/base/ltnews02.pdf and b/macros/latex/base/ltnews02.pdf differ diff --git a/macros/latex/base/ltnews03.pdf b/macros/latex/base/ltnews03.pdf index 55c4f73b7f..34bcb747fd 100644 Binary files a/macros/latex/base/ltnews03.pdf and b/macros/latex/base/ltnews03.pdf differ diff --git a/macros/latex/base/ltnews04.pdf b/macros/latex/base/ltnews04.pdf index 03b34f71f2..0846a4453e 100644 Binary files a/macros/latex/base/ltnews04.pdf and b/macros/latex/base/ltnews04.pdf differ diff --git a/macros/latex/base/ltnews05.pdf b/macros/latex/base/ltnews05.pdf index 693d87c824..65cac33031 100644 Binary files a/macros/latex/base/ltnews05.pdf and b/macros/latex/base/ltnews05.pdf differ diff --git a/macros/latex/base/ltnews06.pdf b/macros/latex/base/ltnews06.pdf index a205d98386..0b21c52a0b 100644 Binary files a/macros/latex/base/ltnews06.pdf and b/macros/latex/base/ltnews06.pdf differ diff --git a/macros/latex/base/ltnews07.pdf b/macros/latex/base/ltnews07.pdf index 1b927a766e..bf73ba4b4e 100644 Binary files a/macros/latex/base/ltnews07.pdf and b/macros/latex/base/ltnews07.pdf differ diff --git a/macros/latex/base/ltnews08.pdf b/macros/latex/base/ltnews08.pdf index 7b5b895edf..5e0e023b98 100644 Binary files a/macros/latex/base/ltnews08.pdf and b/macros/latex/base/ltnews08.pdf differ diff --git a/macros/latex/base/ltnews09.pdf b/macros/latex/base/ltnews09.pdf index 8ccfc74922..a0f5a68f40 100644 Binary files a/macros/latex/base/ltnews09.pdf and b/macros/latex/base/ltnews09.pdf differ diff --git a/macros/latex/base/ltnews10.pdf b/macros/latex/base/ltnews10.pdf index 2a991a0611..b06683fbf6 100644 Binary files a/macros/latex/base/ltnews10.pdf and b/macros/latex/base/ltnews10.pdf differ diff --git a/macros/latex/base/ltnews11.pdf b/macros/latex/base/ltnews11.pdf index d69729c8c5..fc8aedc500 100644 Binary files a/macros/latex/base/ltnews11.pdf and b/macros/latex/base/ltnews11.pdf differ diff --git a/macros/latex/base/ltnews12.pdf b/macros/latex/base/ltnews12.pdf index 68b649e244..0f35c8ab0a 100644 Binary files a/macros/latex/base/ltnews12.pdf and b/macros/latex/base/ltnews12.pdf differ diff --git a/macros/latex/base/ltnews13.pdf b/macros/latex/base/ltnews13.pdf index 44b1755b94..b42e6b04aa 100644 Binary files a/macros/latex/base/ltnews13.pdf and b/macros/latex/base/ltnews13.pdf differ diff --git a/macros/latex/base/ltnews14.pdf b/macros/latex/base/ltnews14.pdf index d852638b7d..8951745573 100644 Binary files a/macros/latex/base/ltnews14.pdf and b/macros/latex/base/ltnews14.pdf differ diff --git a/macros/latex/base/ltnews15.pdf b/macros/latex/base/ltnews15.pdf index 84f9092d45..6453f789a7 100644 Binary files a/macros/latex/base/ltnews15.pdf and b/macros/latex/base/ltnews15.pdf differ diff --git a/macros/latex/base/ltnews16.pdf b/macros/latex/base/ltnews16.pdf index e2b4c586ed..a645558f61 100644 Binary files a/macros/latex/base/ltnews16.pdf and b/macros/latex/base/ltnews16.pdf differ diff --git a/macros/latex/base/ltnews17.pdf b/macros/latex/base/ltnews17.pdf index 9f645aa690..1f745f203e 100644 Binary files a/macros/latex/base/ltnews17.pdf and b/macros/latex/base/ltnews17.pdf differ diff --git a/macros/latex/base/ltnews18.pdf b/macros/latex/base/ltnews18.pdf index 1356eb153e..c3a8941a76 100644 Binary files a/macros/latex/base/ltnews18.pdf and b/macros/latex/base/ltnews18.pdf differ diff --git a/macros/latex/base/ltnews19.pdf b/macros/latex/base/ltnews19.pdf index 35e0bda64b..dc7a6820ba 100644 Binary files a/macros/latex/base/ltnews19.pdf and b/macros/latex/base/ltnews19.pdf differ diff --git a/macros/latex/base/ltnews20.pdf b/macros/latex/base/ltnews20.pdf index 65ebafbf08..417ec12536 100644 Binary files a/macros/latex/base/ltnews20.pdf and b/macros/latex/base/ltnews20.pdf differ diff --git a/macros/latex/base/ltnews21.pdf b/macros/latex/base/ltnews21.pdf index 2583506089..1dbfc15e11 100644 Binary files a/macros/latex/base/ltnews21.pdf and b/macros/latex/base/ltnews21.pdf differ diff --git a/macros/latex/base/ltnews22.pdf b/macros/latex/base/ltnews22.pdf index 7069bbd881..4e70eb7c6c 100644 Binary files a/macros/latex/base/ltnews22.pdf and b/macros/latex/base/ltnews22.pdf differ diff --git a/macros/latex/base/ltnews23.pdf b/macros/latex/base/ltnews23.pdf index ca66955afa..5316031397 100644 Binary files a/macros/latex/base/ltnews23.pdf and b/macros/latex/base/ltnews23.pdf differ diff --git a/macros/latex/base/ltnews24.pdf b/macros/latex/base/ltnews24.pdf index f2c8066238..f248fc3459 100644 Binary files a/macros/latex/base/ltnews24.pdf and b/macros/latex/base/ltnews24.pdf differ diff --git a/macros/latex/base/ltnews25.pdf b/macros/latex/base/ltnews25.pdf index 142bf7b039..2d705f9819 100644 Binary files a/macros/latex/base/ltnews25.pdf and b/macros/latex/base/ltnews25.pdf differ diff --git a/macros/latex/base/ltnews26.pdf b/macros/latex/base/ltnews26.pdf index 6c5d647d64..a653967936 100644 Binary files a/macros/latex/base/ltnews26.pdf and b/macros/latex/base/ltnews26.pdf differ diff --git a/macros/latex/base/ltnews27.pdf b/macros/latex/base/ltnews27.pdf index 1f0bcbc27a..27201797d9 100644 Binary files a/macros/latex/base/ltnews27.pdf and b/macros/latex/base/ltnews27.pdf differ diff --git a/macros/latex/base/ltnews28.pdf b/macros/latex/base/ltnews28.pdf index de3a29db79..093ed9aa3f 100644 Binary files a/macros/latex/base/ltnews28.pdf and b/macros/latex/base/ltnews28.pdf differ diff --git a/macros/latex/base/ltnews29.pdf b/macros/latex/base/ltnews29.pdf index 4a094a88af..9aa2007043 100644 Binary files a/macros/latex/base/ltnews29.pdf and b/macros/latex/base/ltnews29.pdf differ diff --git a/macros/latex/base/ltnews30.pdf b/macros/latex/base/ltnews30.pdf index db62aea7a8..f67a613556 100644 Binary files a/macros/latex/base/ltnews30.pdf and b/macros/latex/base/ltnews30.pdf differ diff --git a/macros/latex/base/ltnews31.pdf b/macros/latex/base/ltnews31.pdf index 579fd7e2a8..2773922f5f 100644 Binary files a/macros/latex/base/ltnews31.pdf and b/macros/latex/base/ltnews31.pdf differ diff --git a/macros/latex/base/ltnews32.pdf b/macros/latex/base/ltnews32.pdf index 1eaa53b6e1..7367054b65 100644 Binary files a/macros/latex/base/ltnews32.pdf and b/macros/latex/base/ltnews32.pdf differ diff --git a/macros/latex/base/ltnews33.pdf b/macros/latex/base/ltnews33.pdf index 76c720e3b5..fc08d010c3 100644 Binary files a/macros/latex/base/ltnews33.pdf and b/macros/latex/base/ltnews33.pdf differ diff --git a/macros/latex/base/ltnews34.pdf b/macros/latex/base/ltnews34.pdf index 3d7ae3a8d7..9a5115132b 100644 Binary files a/macros/latex/base/ltnews34.pdf and b/macros/latex/base/ltnews34.pdf differ diff --git a/macros/latex/base/ltnews35.pdf b/macros/latex/base/ltnews35.pdf index c0dd1b20ea..b1c446c642 100644 Binary files a/macros/latex/base/ltnews35.pdf and b/macros/latex/base/ltnews35.pdf differ diff --git a/macros/latex/base/ltnews35.tex b/macros/latex/base/ltnews35.tex index 0e0cda79b1..0230ef6e58 100644 --- a/macros/latex/base/ltnews35.tex +++ b/macros/latex/base/ltnews35.tex @@ -208,7 +208,7 @@ means that existing documents are in no way affected by the work that is carried out and is in a wider alpha or beta test phase. Documentation about the new command and -already existing keys are in \file{l3meta.pdf} and \file{documentmetadata-support.pdf} +already existing keys are in \file{ltmeta} (part of \file{source2e.pdf}) and \file{documentmetadata-support.pdf} and also in the documentation of the \pkg{pdfmanagement-testphase} package. Package and class authors can test if a user has used \cs{DocumentMetadata} @@ -443,10 +443,6 @@ selects a true or false code branch. As usual, the variants branch leads to some action. Further details and examples are given in \file{usrguide3.pdf}. -This test can also be useful if you set up key/value options and want -to test if a key was specified without giving a value, vs.\ -specifying \enquote{\textit{key}\texttt{ = ,}}. - \subsection{Better allocator for Lua command ids} diff --git a/macros/latex/base/ltnews36.pdf b/macros/latex/base/ltnews36.pdf new file mode 100644 index 0000000000..5272f171d4 Binary files /dev/null and b/macros/latex/base/ltnews36.pdf differ diff --git a/macros/latex/base/ltnews36.tex b/macros/latex/base/ltnews36.tex new file mode 100644 index 0000000000..d6df801db2 --- /dev/null +++ b/macros/latex/base/ltnews36.tex @@ -0,0 +1,541 @@ +% \iffalse meta-comment +% +% Copyright 2021-2022 +% The LaTeX Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% -—————————————— +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3c +% of this license or (at your option) any later version. +% The latest version of this license is in +% https://www.latex-project.org/lppl.txt +% and version 1.3c or later is part of all distributions of LaTeX +% version 2008 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% Filename: ltnews36.tex +% +% This is issue 36 of LaTeX News. + +\NeedsTeXFormat{LaTeX2e}[2020-02-02] + +\documentclass{ltnews} + +%% Maybe needed only for Chris' inadequate system: +\providecommand\Dash {\unskip \textemdash} + +%% NOTE: Chris' preferred hyphens! +%%\showhyphens{parameters} +%% \hyphenation{because parameters parameter} + +\usepackage[T1]{fontenc} + +\usepackage{lmodern,url,hologo} + +\usepackage{csquotes} +\usepackage{multicol} +\usepackage{color} + +\providecommand\hook[1]{\texttt{#1}} + +\providecommand\meta[1]{$\langle$\textrm{\itshape#1}$\rangle$} +\providecommand\option[1]{\texttt{#1}} +\providecommand\env[1]{\texttt{#1}} +\providecommand\Arg[1]{\texttt\{\meta{#1}\texttt\}} + + +\providecommand\eTeX{\hologo{eTeX}} +\providecommand\XeTeX{\hologo{XeTeX}} +\providecommand\LuaTeX{\hologo{LuaTeX}} +\providecommand\pdfTeX{\hologo{pdfTeX}} +\providecommand\MiKTeX{\hologo{MiKTeX}} +\providecommand\CTAN{\textsc{ctan}} +\providecommand\TL{\TeX\,Live} +\providecommand\githubissue[2][]{\ifhmode\unskip\fi + \quad\penalty500\strut\nobreak\hfill + \mbox{\small\slshape(% + \href{https://github.com/latex3/latex2e/issues/\getfirstgithubissue#2 \relax}% + {github issue#1 #2}% + )}% + \par\smallskip} +%% But Chris has to mostly disable \href for his TEXPAD app: +%% \def\href #1{} % Only For Chris' deficient TeX engine + +% simple solution right now (just link to the first issue if there are more) +\def\getfirstgithubissue#1 #2\relax{#1} + +\providecommand\sxissue[1]{\ifhmode\unskip + \else + % githubissue preceding + \vskip-\smallskipamount + \vskip-\parskip + \fi + \quad\penalty500\strut\nobreak\hfill + \mbox{\small\slshape(\url{https://tex.stackexchange.com/#1})}\par} + +\providecommand\gnatsissue[2]{\ifhmode\unskip\fi + \quad\penalty500\strut\nobreak\hfill + \mbox{\small\slshape(% + \href{https://www.latex-project.org/cgi-bin/ltxbugs2html?pr=#1\%2F\getfirstgithubissue#2 \relax}% + {gnats issue #1/#2}% + )}% + \par} + +\let\cls\pkg +\providecommand\env[1]{\texttt{#1}} +\providecommand\acro[1]{\textsc{#1}} + +\vbadness=1400 % accept slightly empty columns + + +\makeatletter +% maybe not the greatest design but normally we wouldn't have subsubsections +\renewcommand{\subsubsection}{% + \@startsection {subsubsection}{2}{0pt}{1.5ex \@plus 1ex \@minus .2ex}% + {-1em}{\@subheadingfont\colonize}% +} +\providecommand\colonize[1]{#1:} +\makeatother + +\let\finalvspace\vspace % for document layout fixes + +% Undo ltnews's \verbatim@font with active < and > +\makeatletter +\def\verbatim@font{% + \normalsize\ttfamily} +\makeatletter + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\providecommand\tubcommand[1]{} +\tubcommand{\input{tubltmac}} + +\publicationmonth{November} +\publicationyear{2022} % --- DRAFT version for upcoming release} + +\publicationissue{36} + +\begin{document} + +\tubcommand{\addtolength\textheight{4.2pc}} % only for TUB + +\maketitle +{\hyphenpenalty=10000 \exhyphenpenalty=10000 \spaceskip=3.33pt \hbadness=10000 +\tableofcontents} + +\setlength\rightskip{0pt plus 3em} + + +\medskip + + +\section{Introduction} + +The 2022-11 release of \LaTeX{} is largely a consolidation release +where we made a number of minor improvements to fix some bugs or +improve one or the other interface. + +The only really important functionality that was added is described in +the next section: the ability to easily define document-level commands +and environments that accept a key/value list in one of its (usually +optional) arguments, including the ability to determine if the argument +does in fact contain such a key/value list or just a single +\enquote{classical} value. + +For the \enquote{Tagged \LaTeX{} Project} this functionality is very +important because many document-level commands will need to accept +such key/value lists, for example, to specify alternative text or +overwrite default tagging if that becomes necessary in a document. + + +\section{Auto-detecting key/value arguments} + +To allow extension of the core \LaTeX{} syntax, \pkg{ltcmd} now supports +a \texttt{={...}}\ modifier when grabbing arguments. This modifier instructs +\LaTeX{} that the argument should be passed to the underlying code as +a set of key/values. If the argument does not \enquote{look like} a set +of key/values, it will be converted into a single key/value pair, with +the argument to \texttt{=} specifying the name of that key. For +example, the \cs{caption} command could be defined as +\begin{verbatim} + \DeclareDocumentCommand\caption + {s ={short-text}+O{#3} +m} + {...} +\end{verbatim} +which would mean that if the optional argument does \emph{not} +contain key/value data, it will be converted to a single key/value +pair with the key name \texttt{short-text}. + +Arguments which begin with \texttt{=,} are always interpreted as +key/values even if they do not contain further \texttt{=} signs. +Any \texttt{=} signs enclosed within \verb|$...$| or \verb|\(...\)|, +i.e.~in inline math mode, are ignored, meaning that +only \texttt{=} outside of math mode will generally cause +interpretation as key/value material. + +In case the argument contains a \enquote{textual} \texttt{=} sign that +is mistaken as a key/value indicator you can hide it using a brace +group as you would do in other places, e.g., +\begin{verbatim} +\caption[{Use of = signs}] + {Use of = signs in optional arguments} +\end{verbatim} +However, because \texttt{=} signs in math mode are already ignored, this +should seldom be necessary. + + +\section{A note for font package developers} + +\subsection{Encoding subsets for \texttt{TS1} encoded fonts} + +The text companion encoding \texttt{TS1} is unfortunately not very +faithfully supported in fonts that are not close cousins to the +Computer Modern fonts. It was therefore necessary to provide the +notion of \enquote{sub-encodings} on a per font basis. These +sub-encodings are declared for a font family with the help of a +\cs{DeclareEncodingSubset} declaration, see \cite{36:fntguide} for +details. + +Maintainers of font bundles that include \texttt{TS1} encoded font +files should add an appropriate declaration into the corresponding +\texttt{ts1}\textit{family}\texttt{.fd} file, because otherwise the +default subencoding is assumed, which is probably disabling too many +glyphs that are actually available in the font.\footnote{The \LaTeX{} + format contains declarations for many font families already. This + was done in 2020 to quickstart the use of the symbols in the kernel, + but it is really the wrong place for such declarations. Thus, for + new fonts the declarations should be placed into the corresponding + \texttt{.fd} files.} +% +\githubissue{905} + +\section{New or improved commands} + +\subsection{Better language handling for case-changing commands} + +The commands \cs{MakeUppercase}, \cs{MakeLowercase} and \cs{MakeTitlecase} now +automatically detect the locale currently in use when \pkg{babel} is loaded. +This allows automatic adjustment of letter mappings where appropriate. They +also accept a leading optional argument. This accepts a key--value list of +control settings. At present, there is one key available: \texttt{locale}, +which can also be accessed via the alias \texttt{lang}. This is intended to +allow local setting of the language, which can be done using a BCP-47 +descriptor. For example, this could be used to force Turkish case changing in +otherwise English input +\begin{verbatim} +\MakeUppercase[lang = tr]{Ragıp Hulûsi Özdem} +\end{verbatim} +yields + \MakeUppercase[lang = tr]{Ragıp Hulûsi Özdem}. +% RAGIP HULÛS\.I ÖZDEM. %TUB + +\section{Code improvements} + +\subsection{Support for slanted small caps in the EC fonts} +For some time \LaTeX{} has supported the combination of the shapes +small caps and italic/slanted. The EC fonts contain slanted small caps fonts +but using them required the loading of an external package. Suitable font definitions +have now been added to \pkg{t1cmd.fd} and so from now on +\begin{verbatim} +\usepackage[T1]{fontenc} +... + \textsc{\textsl{Slanted Small Caps}}; + \textsc{\textit{Italic Small Caps}}; + \bfseries + \textsc{\textsl{Bold Slanted Small Caps}}; + \textsc{\textit{Bold Italic Small Caps}}. +\end{verbatim} +will give the expected result: {\fontfamily{cmr} +\textsc{\textsl{Slanted Small Caps}}; \textsc{\textit{Italic Small Caps}}; +\bfseries +\textsc{\textsl{Bold Slanted Small Caps}}; \textsc{\textit{Bold Italic Small Caps}}}. + +Given that the Computer Modern fonts in \texttt{T1} do not have real italic small caps but only +slanted small caps, the latter is substituted for the former, which is +why above both work but you see no difference between the two (and in the log you get a +substitution warning for the \cs{textit}\cs{textsc} shape combination). +% +\githubissue{782} + + +\subsection{EC sans serif at small sizes} + +The EC (T1 encoded Computer Modern) sans serif fonts have errors at +small sizes: the medium weight is bolder and wider than the bold +extended. This makes them unusable at these small sizes. The default +\texttt{.fd} file has therefore been adjusted to use a scaled down 8pt +font instead. +% +\githubissue{879} + + + +\subsection{Improve font series handling with incorrect \texttt{.fd} files} + +By convention, the font series value is supposed to contain no +\texttt{m}, unless you refer to the \enquote{medium} series (which is +represented by a single \texttt{m}). For example, one should write +\texttt{c} for \enquote{medium weight, condensed width} and not +\texttt{mc}. This was one of the many space-conserving methods +necessary in the early days of \LaTeXe. + +Some older \texttt{.fd} files +do not obey that convention but use \texttt{mc}, \texttt{bm}, etc., in +their declarations. As a result, some font selection scheme +functionality was not working when confronted with such \texttt{.fd} +files. We have therefore augmented \cs{DeclareSymbolFont} and +\cs{SetSymbolFont} to strip any surplus \texttt{m} from their series argument +so that they do not unnecessarily trigger font +substitutions. Regardless of this support such +\texttt{.fd} files should get fixed by their maintainers. +% +\githubissue{918} + + + + +\subsection{Detect nested \texttt{minipage} environments} + +Nesting of \texttt{minipage} environments is only partially supported +in \LaTeX{} and can lead to incorrect output, such as overfull boxes +or footnotes appearing in the wrong place; +see~\cite[p.~106]{36:Lamport}. However, until now there was no warning +if that happened. This has been changed and the environment now +warns if you nest it in another \texttt{minipage} environment that +already contains footnotes. +% +\githubissue{168} + + +\subsection{Robust commands in package options} +With the standard key-based option handler added in the last release, +or with contributed packages offering similar features, users may +expect to be able to use a package option such as +\verb|[font=\bfseries]|. +Previously this failed with internal errors as the option list was +expanded via \verb|\edef|. This has now been changed to use the +existing command \verb|\protected@edef| so that any \LaTeX\ robust +command should be safe to pass to a key value option. +% +\githubissue{932} + + + + +\subsection{Improve \pkg{l3docstrip} integration into \pkg{docstrip}} + +In 2020 we merged \pkg{l3docstrip.tex} into \pkg{docstrip.tex} to +support the \texttt{\%\string<@@=\meta{module}\string>} syntax of +\pkg{expl3}; see~\cite{36:ltnews32}. However, this support was +incomplete, because it didn't cover \pkg{docstrip} lines of the form +\texttt{\%<+...>} or \texttt{\%<-...>}. This was never noticed until +now, because usually \texttt{\%<*...>} blocks are used. Now all lines +in a \texttt{.dtx} file are subject to the \texttt{@@} replacement +approach. +% +\githubissue{903} + + + +\subsection{\LuaTeX\ callback efficiency improvement} + +The mechanism for providing the +\texttt{pre/post\_mlist\_to\_hlist\_filter} callbacks in \LuaTeX\ has +been improved to make it more reusable and to avoid overhead if these +callbacks are not used. +% +\githubissue{830} + + +\subsection{Rule-based ordering for \LuaTeX\ callback handlers} + +In \hologo{LuaLaTeX} the callback handlers used to be called in the order +in which they were registered in, but this was often rather fragile. +It depends a lot on the load order and any attempts to enforce a +different order required unregistering and reregistering the handlers to +be reordered. Additionally, even if some ordering constraints where +enforced that way, another package loaded later could accidentally +overwrite it. + +To improve this, we now order the callback handlers based on ordering +rules similar to the hook rules. + +When registering a callback which should run before or after another +callback, \verb+luatexbase.declare_callback_rule+ can now be used to +record this ordering constraint. +For example +\begin{verbatim} +luatexbase.add_to_callback + ('pre_shaping_filter', my_handler, 'my_name') +luatexbase.declare_callback_rule + ('pre_shaping_filter', + 'my_name', 'before', 'other_name') +\end{verbatim} +will ensure that \verb+my_handler+ will always be called before the +handler registered as \verb+other_name+. + +This also means that the order in which callbacks are registered no +longer implicitly defines an order. +Code which relied on this implicit order should now define the order +rules explicitly. + + + +\section{Bug fixes} + +\subsection{Prevent \TeX{} from losing a \cs{smash}} + +When \TeX{} is typesetting a fraction, it will rebox the material in +either the numerator or denominator, depending on which is wider. If +the repackaged part consists of a single box, that box gets new +dimensions and if it was built using a \cs{smash} that effect vanishes +(because a smash is nothing other than zeroing some box dimension, +which now got undone). For example, in the line +\begin{verbatim} +\frac{1}{2} = \frac{1}{\smash{2^X}} + \neq \frac{100}{\smash{2^X}} +\end{verbatim} +the $2$ in the denominators was not always at the same vertical position, because +the second \cs{smash} was ignored due to reboxing: +\vspace{-1.2\baselineskip} +\[ +\makeatletter +\def\mathsm@sh#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh} % old definition +\makeatother +\newcommand*\drawbaseline{\rlap{\vrule width 60pt height 0.1pt depth 0pt }} +\qquad +\frac{1}{\drawbaseline2} = \frac{1}{\smash{2^X}} \neq +\frac{100}{\smash{2^X}} +\pagebreak % not TUB +\] +The differences are subtle but noticeable. +This is now corrected and the \cs{smash} is always +honored. Thus now you get this output: +\vspace{-1.2\baselineskip} +\[ +\newcommand*\drawbaseline{\rlap{\vrule width 60pt height 0.1pt depth 0pt }} +\qquad +\frac{1}{\drawbaseline2} = \frac{1}{\smash{2^X}} \neq +\frac{100}{\smash{2^X}} +\] +\par +\vspace{-1.5\baselineskip} +% +\githubissue{517} + + +\subsection{Resolve an issue with \cs{mathchoice} and \texttt{localalphabets}} + +The code for keeping a number of math alphabets local (introduced in +2021; see~\cite{36:ltnews34}) used \cs{aftergroup} to do some cleanup actions after a +formula had finished. Unfortunately, \cs{aftergroup} can't be used +inside the arguments of the \cs{mathchoice} primitive and as a result one +got low-level errors if the freezing happened in such a place. The +implementation was therefore revised to avoid the \cs{aftergroup} +approach altogether. +% +\githubissue{921} + +\subsection{Reporting of unused global options when using key/value processing} + +Using the new key/value option processor did not properly report any unused +global options when it was used in handling class options. This has now been +corrected. +% +\githubissue{938} + + +%\section{Changes to packages in the \pkg{amsmath} category} + + +%\newpage TUB? + +\section{Changes to packages in the \pkg{graphics} category} + +\subsection{Fix a \cs{mathcolor} bug} + +The \cs{mathcolor} command introduced in \cite{36:ltnews35} needs to +scan for following sub- and superscripts, but if it did so at the end +of an alignment cell, e.g., in a \texttt{array} environment, the +\texttt{\&} was evaluated too early, causing some internal errors. This +is now properly guarded for. +% +\githubissue{901} + + + +\section{Changes to packages in the \pkg{tools} category} + +\subsection{\pkg{array}: Correctly identify single-line m-cells} + +Cells in m-columns that contain only a single line are supposed to +behave like single-line p-cells and align at the same baseline. To +test for the condition, \pkg{array} used to compare the height of the cell to +the height of the strut used for the table rows. However, the height of that +strut depends on the setting of \cs{arraystretch} and if you made this +negative (or very large) the test came out wrong. Therefore, we now +test against the height of a normal strut to ensure that single-line +cells are correctly identified as such (unless their content is truly very +tall, in which case aligning is pointless anyway). +% +\githubissue{766} + + +%\medskip + +\begin{thebibliography}{9} + +\fontsize{9.3}{11.3}\selectfont + +%\bibitem{36:blueprint} Frank Mittelbach and Chris Rowley: +% \emph{\LaTeX{} Tagged PDF \Dash A blueprint for a large project}.\\ +% \url{https://latex-project.org/publications/indexbyyear/2020/} + +%\bibitem{36:source2e} +% \emph{\LaTeX{} documentation on the \LaTeX{} Project Website}.\\ +% \url{https://latex-project.org/help/documentation/} + +\bibitem{36:Lamport} +Leslie Lamport. +\newblock {\LaTeX}: {A} Document Preparation System: User's Guide and Reference + Manual. +\newblock \mbox{Addison}-Wesley, Reading, MA, USA, 2nd edition, 1994. +\newblock ISBN 0-201-52983-1. +\newblock Reprinted with corrections in 1996. + +\bibitem{36:ltnews32} \LaTeX{} Project Team: + \emph{\LaTeXe{} news 32}.\\ + \url{https://latex-project.org/news/latex2e-news/ltnews32.pdf} + +\bibitem{36:ltnews34} \LaTeX{} Project Team: + \emph{\LaTeXe{} news 34}.\\ + \url{https://latex-project.org/news/latex2e-news/ltnews34.pdf} + +\bibitem{36:ltnews35} \LaTeX{} Project Team: + \emph{\LaTeXe{} news 35}.\\ + \url{https://latex-project.org/news/latex2e-news/ltnews35.pdf} + +\bibitem{36:fntguide} \LaTeX{} Project Team: + \emph{\LaTeXe{} font selection}.\\ + \url{https://latex-project.org/help/documentation/} + +%\bibitem{36:ltfilehook-doc} Frank Mittelbach, Phelype Oleinik, \LaTeX{}~Project~Team: +% \emph{The \texttt{\upshape ltfilehook} documentation}.\\ +% Run \texttt{texdoc} \texttt{ltfilehook-doc} to view. +\end{thebibliography} + + + +\end{document} diff --git a/macros/latex/base/ltoutput.dtx b/macros/latex/base/ltoutput.dtx index c2cb8f66b3..1cbc7ab0b1 100644 --- a/macros/latex/base/ltoutput.dtx +++ b/macros/latex/base/ltoutput.dtx @@ -37,7 +37,7 @@ %<*driver> % \fi \ProvidesFile{ltoutput.dtx} - [2022/04/03 v1.4i LaTeX Kernel (Output Routine)] + [2022/08/20 v1.4j LaTeX Kernel (Output Routine)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltoutput.dtx} @@ -829,6 +829,17 @@ % \end{macrocode} % \end{macro} % \end{macro} +% \begin{macro}{\stockheight} +% \changes{v1.4j}{2022/08/20}{Register added} +% \begin{macro}{\stockwidth} +% \changes{v1.4j}{2022/08/20}{Register added} +% New |\stock|\ldots\ registers. +% \begin{macrocode} +\newdimen\stockheight +\newdimen\stockwidth +% \end{macrocode} +% \end{macro} +% \end{macro} % % \begin{macro}{\if@insert} % \begin{macro}{\if@fcolmade} diff --git a/macros/latex/base/ltpara-code.pdf b/macros/latex/base/ltpara-code.pdf index 80045a16e1..228405ba00 100644 Binary files a/macros/latex/base/ltpara-code.pdf and b/macros/latex/base/ltpara-code.pdf differ diff --git a/macros/latex/base/ltpara-doc.pdf b/macros/latex/base/ltpara-doc.pdf index b068275c12..ff7268a831 100644 Binary files a/macros/latex/base/ltpara-doc.pdf and b/macros/latex/base/ltpara-doc.pdf differ diff --git a/macros/latex/base/ltshipout-code.pdf b/macros/latex/base/ltshipout-code.pdf index a677a7f9ec..53b30f4165 100644 Binary files a/macros/latex/base/ltshipout-code.pdf and b/macros/latex/base/ltshipout-code.pdf differ diff --git a/macros/latex/base/ltshipout-doc.pdf b/macros/latex/base/ltshipout-doc.pdf index ec355c1a3f..dcd312f0dd 100644 Binary files a/macros/latex/base/ltshipout-doc.pdf and b/macros/latex/base/ltshipout-doc.pdf differ diff --git a/macros/latex/base/ltshipout.dtx b/macros/latex/base/ltshipout.dtx index 83fab820a9..ae29c1acad 100644 --- a/macros/latex/base/ltshipout.dtx +++ b/macros/latex/base/ltshipout.dtx @@ -33,7 +33,7 @@ % % \begin{macrocode} \providecommand\ltshipoutversion{v1.0m} -\providecommand\ltshipoutdate{2022/05/08} +\providecommand\ltshipoutdate{2022/08/26} % \end{macrocode} % %<*driver> @@ -330,7 +330,7 @@ % \begin{syntax} % \cs{AtBeginDvi} \Arg{code} % \end{syntax} - % \cs{AtBeginDvi} is the existing \LaTeXe{} interface to fill the +% \cs{AtBeginDvi} is the existing \LaTeXe{} interface to fill the % \hook{shipout/firstpage} hook. This is not really a good name % as it is not just supporting \texttt{.dvi} but also \texttt{.pdf} % output or \texttt{.xdv}. diff --git a/macros/latex/base/lttextcomp.dtx b/macros/latex/base/lttextcomp.dtx index de6b221b6c..8f5ec0d200 100644 --- a/macros/latex/base/lttextcomp.dtx +++ b/macros/latex/base/lttextcomp.dtx @@ -37,7 +37,7 @@ % % \ProvidesFile{lttextcomp.dtx} - [2021/12/09 v1.0f LaTeX Kernel (text companion symbols)] + [2022/08/07 v1.0g LaTeX Kernel (text companion symbols)] % \iffalse \documentclass{ltxdoc} \begin{document} @@ -226,7 +226,13 @@ \@ifundefined{#1:#2}% {\@font@info{Setting #2 sub-encoding to #1/#3}}% {\@font@info{Changing #2 sub-encoding to #1/#3}}% - \@namedef{#1:#2}{#3}} +% \end{macrocode} +% This declaration should be usable in \texttt{.fd} files and +% therefore has to make its definition globally, because such files +% can get loaded in random places. +% \changes{v1.0g}{2022/08/07}{Make global declaration (gh/905)} +% \begin{macrocode} + \global\@namedef{#1:#2}{#3}} % \end{macrocode} % % Any reason to allow those in the middle of documents? diff --git a/macros/latex/base/ltvers.dtx b/macros/latex/base/ltvers.dtx index 37b91d2231..e1282139e1 100644 --- a/macros/latex/base/ltvers.dtx +++ b/macros/latex/base/ltvers.dtx @@ -112,10 +112,10 @@ % %\edef\latexreleaseversion %<*2ekernel|latexrelease> - {2022-06-01} + {2022-11-01} % %<*2ekernel> -\def\patch@level{5} +\def\patch@level{0} % \end{macrocode} % % \begin{macro}{\development@branch@name} diff --git a/macros/latex/base/ltx3info.pdf b/macros/latex/base/ltx3info.pdf index 3b1653af0b..ebe0b29cbb 100644 Binary files a/macros/latex/base/ltx3info.pdf and b/macros/latex/base/ltx3info.pdf differ diff --git a/macros/latex/base/ltxdoc.pdf b/macros/latex/base/ltxdoc.pdf index 7e39f14d7e..972547143f 100644 Binary files a/macros/latex/base/ltxdoc.pdf and b/macros/latex/base/ltxdoc.pdf differ diff --git a/macros/latex/base/makeindx.pdf b/macros/latex/base/makeindx.pdf index 91e05501c9..bfa6da1e8c 100644 Binary files a/macros/latex/base/makeindx.pdf and b/macros/latex/base/makeindx.pdf differ diff --git a/macros/latex/base/manifest.txt b/macros/latex/base/manifest.txt index daebefee06..d63945fa0e 100644 --- a/macros/latex/base/manifest.txt +++ b/macros/latex/base/manifest.txt @@ -33,8 +33,8 @@ % encguide.tex -- Guide to font encodings. % fntguide.tex -- Guide to font selection. % modguide.tex -- Guide to modifying and distributing LaTeX. -% usrguide.tex -- User guide for this release. -% usrguide3.tex -- User guide for expl3-based methods. +% usrguide.tex -- User guide for the 2020s onward. +% usrguide-historic.tex -- User guide for move from LaTeX2.09 to LaTeX2e. % % ltnews01.tex -- What was new in the release dated 1994/06. % ltnews02.tex -- What was new in the release dated 1994/12. diff --git a/macros/latex/base/modguide.pdf b/macros/latex/base/modguide.pdf index 8afd8046aa..5ba6e7f6b1 100644 Binary files a/macros/latex/base/modguide.pdf and b/macros/latex/base/modguide.pdf differ diff --git a/macros/latex/base/modguide.tex b/macros/latex/base/modguide.tex index b0651da0a5..3474d8a5fc 100644 --- a/macros/latex/base/modguide.tex +++ b/macros/latex/base/modguide.tex @@ -41,7 +41,12 @@ \title{Modifying \LaTeX} \author{\copyright~Copyright 1995, \LaTeX\ Project Team.\\ - All rights reserved.} + All rights reserved.% + \footnote{This file may distributed and/or modified under the + conditions of the \LaTeX{} Project Public License, either version 1.3c + of this license or (at your option) any later version. See the source + texttt{modguide.tex} for full details.}% +} \date{12 December 1995} diff --git a/macros/latex/base/nfssfont.pdf b/macros/latex/base/nfssfont.pdf index 316a5afd99..8300d6d57b 100644 Binary files a/macros/latex/base/nfssfont.pdf and b/macros/latex/base/nfssfont.pdf differ diff --git a/macros/latex/base/proc.pdf b/macros/latex/base/proc.pdf index 67e5dcf235..adb946d0dc 100644 Binary files a/macros/latex/base/proc.pdf and b/macros/latex/base/proc.pdf differ diff --git a/macros/latex/base/slides.pdf b/macros/latex/base/slides.pdf index be6cc79358..4995bb85fa 100644 Binary files a/macros/latex/base/slides.pdf and b/macros/latex/base/slides.pdf differ diff --git a/macros/latex/base/slifonts.pdf b/macros/latex/base/slifonts.pdf index 4bb21df481..cbfc3a4611 100644 Binary files a/macros/latex/base/slifonts.pdf and b/macros/latex/base/slifonts.pdf differ diff --git a/macros/latex/base/source2e.pdf b/macros/latex/base/source2e.pdf index 625e2df5d4..55c125f099 100644 Binary files a/macros/latex/base/source2e.pdf and b/macros/latex/base/source2e.pdf differ diff --git a/macros/latex/base/syntonly.pdf b/macros/latex/base/syntonly.pdf index c93990d55a..7a33b0979e 100644 Binary files a/macros/latex/base/syntonly.pdf and b/macros/latex/base/syntonly.pdf differ diff --git a/macros/latex/base/tlc2.pdf b/macros/latex/base/tlc2.pdf index 5edfe4b178..ec25aed916 100644 Binary files a/macros/latex/base/tlc2.pdf and b/macros/latex/base/tlc2.pdf differ diff --git a/macros/latex/base/tulm.pdf b/macros/latex/base/tulm.pdf index 650e4ded6a..3e8a257fce 100644 Binary files a/macros/latex/base/tulm.pdf and b/macros/latex/base/tulm.pdf differ diff --git a/macros/latex/base/usrguide-historic.pdf b/macros/latex/base/usrguide-historic.pdf new file mode 100644 index 0000000000..b7dae16ef3 Binary files /dev/null and b/macros/latex/base/usrguide-historic.pdf differ diff --git a/macros/latex/base/usrguide-historic.tex b/macros/latex/base/usrguide-historic.tex new file mode 100644 index 0000000000..ce35aaa77c --- /dev/null +++ b/macros/latex/base/usrguide-historic.tex @@ -0,0 +1,1832 @@ +% \iffalse meta-comment +% +% Copyright (C) 1993-2022 +% The LaTeX Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3c +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3c or later is part of all distributions of LaTeX +% version 2008 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% Filename: usrguide-historic.tex + +\NeedsTeXFormat{LaTeX2e}[1995/12/01] + +\documentclass{ltxguide}[2001/05/28] + +\title{\LaTeX\ for authors --- historic version} + +\author{\copyright~Copyright 1995--2022, \LaTeX\ Project Team.\\ + All rights reserved.% + \footnote{This file may distributed and/or modified under the + conditions of the \LaTeX{} Project Public License, either version 1.3c + of this license or (at your option) any later version. See the source + \texttt{usrguide.tex} for full details.}% +} + +\date{30 August 2022} + + +\begin{document} + +\maketitle + +\tableofcontents + +\section{Introduction} + +Welcome to \LaTeXe, the new standard version of the \LaTeX{} Document +Preparation System. + +This document describes how to take advantage of the new features of +\LaTeX, and how to process your old \LaTeX{} documents with +\LaTeXe. However, this document is only a brief introduction to the +new facilities and is intended for authors who are already familiar +with the old version of \LaTeX{}. It is \emph{not} a reference manual +for \LaTeXe{} nor is it a complete introduction to \LaTeX. + +It is somewhat of an historical document now, since \LaTeXe{} came into +existence in 1994. + +\subsection[\LaTeXe---The new \LaTeX~release] + {\LaTeXe---The new \LaTeX~release\\ (well, for more than 10 years now)} + +The previous version of \LaTeX{} was known as \LaTeX~2.09. Over the +years many extensions have been developed for \LaTeX. This is, of +course, a sure sign of its continuing popularity but it has had one +unfortunate result: incompatible \LaTeX{} formats came into use at +different sites. This included `standard \LaTeX~2.09', \LaTeX{} built +with the \emph{New Font Selection Scheme}~(\NFSS), \SLiTeX, \AmSLaTeX, +and so on. Thus, to process documents from various places, a site +maintainer was forced to keep multiple versions of the \LaTeX{} +program. In addition, when looking at a source file it was not always +clear for which format the document was written. + +To put an end to this unsatisfactory situation, \LaTeXe{} has been +produced; it brings all such extensions back under a single format and +thus prevents the proliferation of mutually incompatible dialects of +\LaTeX~2.09. With \LaTeXe{} the `new font selection scheme' is +standard and, for example, \textsf{amsmath} (formerly the \AmSLaTeX{} +format) or \textsf{slides} (formerly the \SLiTeX{} format) are simply +extensions, which may be loaded by documents using the same base format. + +The introduction of a new release also made it possible to add a small +number of often-requested features and to make the task of writing +packages and classes simpler. + +\subsection{\LaTeX3---The long-term future of \LaTeX} +\label{Sec:ltx3} + +\LaTeXe{} is the consolidation step in a comprehensive +reimplementation of the \LaTeX{} system. The next major release of +\LaTeX{} will be \LaTeX3, which will include a radical overhaul of the +document designers' and package writers' interface to \LaTeX. + +\LaTeX3 is a long-term research project but, until it is completed, +the project team are committed to the active maintenance of \LaTeXe{}. +Thus the experience gained from the production and maintenance of +\LaTeXe{} will be a major influence on the design of \LaTeX3. +A brief description of the project can be found in the document +|ltx3info.tex|. + +If you would like to support the project then you are welcome to send +donations to the \LaTeX\ Project Fund; this has been set up to help +the research team by financing various expenses associated with this +voluntary work of maintaining the current \LaTeX{} and developing +\LaTeX\ further. + +The fund is administered by The \TeX{} Users Group and by various +local user groups. Information about making donations and joining +these groups is available from: +\begin{quote}\small\label{addrs} + \texttt{http://www.tug.org/lugs.html} +\end{quote} + +The \LaTeX3{} project has its home page +on the World Wide Web at: +\begin{verbatim} + http://www.latex-project.org/ +\end{verbatim} +This page describes \LaTeX{} and the \LaTeX3 project, and contains +pointers to other \LaTeX{} resources, such as the user guides, the +\TeX{} Frequently Asked Questions, and the \LaTeX{} bugs database. + +Older articles covering aspects of the \LaTeX3 project are also +available for anonymous ftp from the Comprehensive \TeX{} Archive, in +the directory: +\begin{verbatim} + ctan:info/ltx3pub +\end{verbatim} +The file |ltx3pub.bib| in that directory contains an abstract of each +of the files. + +\subsection{Overview} + +This document contains an overview of the new structure and features +of \LaTeX. It is \emph{not} a self-contained document, as it contains +only the features of \LaTeX{} which have changed since version 2.09. +You should read this document in conjunction with an introduction to +\LaTeX{}. + +\begin{description} + +\item[Section~\ref{Sec:class+packages}] + contains an overview of the new structure of + \LaTeX{} documents. It describes how classes and packages work and + how class and package options can be used. It lists the standard + packages and classes which come with \LaTeX. + +\item[Section~\ref{Sec:commands}] describes the new commands available + to authors in \LaTeXe. + +\item[Section~\ref{Sec:209}] shows how to process old \LaTeX{} + documents with \LaTeXe. + +\item[Section~\ref{Sec:problems}] contains advice on dealing with + problems you may encounter in running \LaTeXe. + It lists some error messages which are new in \LaTeXe{} and + it describes some of the more common problems and how to cure them, + or where to find further information. + +\end{description} + +\subsection{Further information} + +For a general introduction to \LaTeX, including the new features of +\LaTeXe, you should read \emph{\LaTeXbook} +by Leslie Lamport~\cite{A-W:LLa94}. + +A more detailed description of the new features of \LaTeX, including an +overview of more than 200 packages and nearly 1000 ready to run examples, is +to be found in \emph{\LaTeXcomp second edition} by Frank Mittelbach and +Michel Goossens~\cite{A-W:MG2004}. + +Packages and programs for producing and manipulating graphics are +discussed at length in \emph{\LaTeXGcomp} by Michel Goossens, +Sebastian Rahtz and Frank Mittelbach~\cite{A-W:GRM97}. + +Solutions for publishing with \LaTeX{} on the World Wide Web are given +in \emph{\LaTeXWcomp} by Michel Goossens and Sebastian +Rahtz~\cite{A-W:GR99}. + +For more information about the many new \LaTeX{} packages you should +read the package documentation, which should be available from the +same source as your copy of \LaTeX. + +There are a number of documentation files which accompany every copy +of \LaTeX. A copy of \emph{\LaTeX{} News} will come out with each +six-monthly release of \LaTeX; it will be found in the files +|ltnews*.tex|. The class- and package-writer's guide \emph{\clsguide} +describes the new \LaTeX{} features for writers of document classes +and packages; it is in |clsguide.tex|. The guide \emph{\fntguide} +describes the \LaTeX{} font selection scheme for class- and +package-writers; it is in |fntguide.tex|. Support for Cyrillic languages +in \LaTeX{} is described in \emph{\cyrguide}. + +The documented source code (from the files used to produce the kernel +format via |latex.ltx|) is now available as +\emph{The \LaTeXe\ Sources}. ] +This very large document also includes an index of +\LaTeX{} commands. It can be typeset from the \LaTeX{} file +|source2e.tex| in the |base| directory, using the source files and +the class file |ltxdoc.cls| from this directory. + +For more information about \TeX{} and \LaTeX{}, please contact your +local \TeX{} Users Group, or the international \TeX{} Users Group (see +page \pageref{addrs}). + + +\section{Classes and packages} +\label{Sec:class+packages} + +This section describes the new structure of \LaTeX{} documents and the +new types of file: \emph{classes} and \emph{packages}. + +\subsection{What are classes and packages?} + +The main difference between \LaTeX~2.09 and \LaTeXe{} is in the +commands before |\begin{document}|. + +In \LaTeX~2.09, documents had \emph{styles}, +such as \textsf{article} or \textsf{book}, and \emph{options}, +such as \textsf{twoside} or \textsf{epsfig}. +These were indicated by the |\documentstyle| command: +\begin{quote} + |\documentstyle|\oarg{options}\arg{style} +\end{quote} +For example, to specify a two-sided article with encapsulated +PostScript figures, you said: +\begin{verbatim} + \documentstyle[twoside,epsfig]{article} +\end{verbatim} +However, there were two different types of document style option: +\emph{built-in options} such as |twoside|; and \emph{packages} such as +|epsfig.sty|. These were very different, since any \LaTeX{} document +style could use the \textsf{epsfig} package but only document styles +which declared the \textsf{twoside} option could use that option. + +To avoid this confusion, \LaTeXe{} differentiates between built-in +options and packages. These are given by the new |\documentclass| and +|\usepackage| commands: +\begin{quote} + |\documentclass|\oarg{options}\arg{class} \\ + |\usepackage|\oarg{options}\arg{packages} +\end{quote} +For example, to specify a two-sided article with encapsulated +PostScript figures, you now write: +\begin{verbatim} + \documentclass[twoside]{article} + \usepackage{epsfig} +\end{verbatim} +You can load more than one package with a single |\usepackage| +command; for example, rather than writing: +\begin{verbatim} + \usepackage{epsfig} + \usepackage{multicol} +\end{verbatim} +you can specify: +\begin{verbatim} + \usepackage{epsfig,multicol} +\end{verbatim} +Note that \LaTeXe{} still understands the \LaTeX~2.09 |\documentstyle| +command. This command causes \LaTeXe{} to enter \emph{\LaTeX~2.09 +compatibility mode}, which is described in Section~\ref{Sec:209}. + +You should not, however, use the |\documentstyle| command for new +documents because this compatibility mode is very slow and the new +features of \LaTeXe{} are not available in this mode. + +To help differentiate between classes and packages, document classes +now end with |.cls| rather than |.sty|. Packages still end with +|.sty|, since most \LaTeX~2.09 packages work well with \LaTeXe. + +\subsection{Class and package options} + +In \LaTeX~2.09, only document styles could have options such as +|twoside| or |draft|. In \LaTeXe{}, both classes and packages are +allowed to have options. For example, to specify a two-sided article +with graphics using the |dvips| driver, you write: + +\begin{verbatim} + \documentclass[twoside]{article} + \usepackage[dvips]{graphics} +\end{verbatim} +It is possible for packages to share common options. For example, +you could, in addition, load the \textsf{color} package by specifying: +\begin{verbatim} + \documentclass[twoside]{article} + \usepackage[dvips]{graphics} + \usepackage[dvips]{color} +\end{verbatim} +But because |\usepackage| allows more than one package to be listed, +this can be shortened to: +\begin{verbatim} + \documentclass[twoside]{article} + \usepackage[dvips]{graphics,color} +\end{verbatim} +In addition, packages will also use each option given to +the |\documentclass| command (if they know what to do with it), so you +could also write: +\begin{verbatim} + \documentclass[twoside,dvips]{article} + \usepackage{graphics,color} +\end{verbatim} +Class and package options are covered in more detail in +\emph{\LaTeXcomp} and in \emph{\clsguide}. + +\subsection{Standard classes} + +The following classes are distributed with \LaTeX: +\begin{description} + +\item[article] The |article| class described in \emph{\LaTeXbook}. +\item[book] The |book| class described in \emph{\LaTeXbook}. +\item[report] The |report| class described in \emph{\LaTeXbook}. +\item[letter] The |letter| class described in \emph{\LaTeXbook}. +\item[slides] The |slides| class described in \emph{\LaTeXbook}, + formerly \SLiTeX. +\item[proc] A document class for proceedings, based on |article|. + Formerly the |proc| package. +\item[ltxdoc] The document class for documenting the \LaTeX{} + program, based on |article|. +\item[ltxguide] The document class for \emph{\usrguide} and + \emph{\clsguide}, based on |article|. The document you are reading + now uses the |ltxguide| class. The layout for this class is likely + to change in future releases of \LaTeX. +\item[ltnews] The document class for the \emph{\LaTeX{} News} + information sheet, based on |article|. The layout for this class + is likely to change in future releases of \LaTeX. +\item[minimal] +\NEWfeature{1995/12/01} + This class is the bare minimum (3 lines) that is needed in a + \LaTeX\ class file. It just sets the text width and height, and + defines |\normalsize|. It is principally intended for debugging + and testing \LaTeX\ code in situations where you do not need to + load a `full' class such as |article|. If, however, you are + designing a completely new class that is aimed for documents with + structure radically different from the structure supplied by the + article class, then it may make sense to use this as a base and add + to it code implementing the required structure, rather than + starting from |article| and modifying the code there. +\end{description} + +\subsection{Standard packages} +\label{Sec:st-pack} + +The following packages are distributed with \LaTeX: +\begin{description} +\item[alltt] +\NEWfeature{1994/12/01} + This package provides the |alltt| environment, which is like + the |verbatim| environment except that |\|, |{|, and |}| + have their usual meanings. It is described in |alltt.dtx| and + \emph{\LaTeXbook}. +\item[doc] This is the basic package for typesetting the documentation + of \LaTeX{} programs. It is described in |doc.dtx| and in + \emph{\LaTeXcomp}. +\item[exscale] This provides scaled versions of the math extension + font. It is described in |exscale.dtx| and \emph{\LaTeXcomp}. + \item[fontenc] This is used to specify which font encoding \LaTeX{} + should use. It is described in |ltoutenc.dtx|. +\item[graphpap] +\NEWfeature{1994/12/01} + This package defines the |\graphpaper| command; this + can be used in a |picture| environment. +\item[ifthen] Provides commands of the form `if\dots then do\dots + otherwise do\dots'. + It is described in |ifthen.dtx| and \emph{\LaTeXcomp}. +\item[inputenc] +\NEWfeature{1994/12/01} + This is used to specify which input encoding \LaTeX{} should use. + It is described in |inputenc.dtx|. +\item[latexsym] \LaTeXe{} no longer loads the \LaTeX{} symbol font by + default. To access it, you should use the |latexsym| package. It + is described in |latexsym.dtx| and in \emph{\LaTeXcomp}; see also + Section~\ref{Sec:problems}. + \item[makeidx] This provides commands for producing indexes. It is + described in \emph{\LaTeXbook} and in \emph{\LaTeXcomp}. + \item[newlfont] This is used to emulate the font commands of + \LaTeX~2.09 with the New Font Selection Scheme. It is described in + \emph{\LaTeXcomp}. + \item[oldlfont] This is used to emulate the font commands of + \LaTeX~2.09. It is described in \emph{\LaTeXcomp}. + \item[showidx] + This causes the argument of each |\index| command to + be printed on the page where it occurs. + It is described in \emph{\LaTeXbook}. + \item[syntonly] This is used to process a document without + typesetting it. It is described in |syntonly.dtx| and in + \emph{\LaTeXcomp}. + \item[tracefnt] This allows you to control how much information about + \LaTeX's font loading is displayed. It is described in + \emph{\LaTeXcomp}. +\end{description} + +\subsection{Related software} + +\NEWdescription{1998/12/01} +The following software should be available from the same distributor +as your copy of \LaTeXe. You should obtain at least the +\textsf{graphics} and \textsf{tools} collections in order to have all +the files described in \emph{\LaTeXbook}. The |amsmath| package (part +of \textsf{amslatex} and formerly known as |amstex|) +and \textsf{babel} are also mentioned in the list +of `standard packages' in section C.5.2 of that book. +\begin{description} +\item[amslatex] Advanced mathematical typesetting from the American + Mathematical Society. This includes the |amsmath| package; it + provides many commands for typesetting mathematical formulas of + higher complexity. It is produced and supported by the American + Mathematical Society and it is described in \emph{\LaTeXcomp}. +\item[babel] This package and related files support typesetting in + many languages. It is described in \emph{\LaTeXcomp}. +\item[cyrillic] +\NEWfeature{1998/12/01} + Everything you need (except the fonts themselves) for + typesetting with Cyrillic fonts. +\item[graphics] This includes the |graphics| package which + provides support for the inclusion and transformation of graphics, + including files produced by other software. Also included, is the + |color| package which provides support for typesetting in colour. + Both these packages are described in \emph{\LaTeXbook}. +\item[psnfss] Everything you need (except the fonts themselves) for + typesetting with a large range of Type~1 (PostScript) fonts. +\item[tools] Miscellaneous packages written by the \LaTeX3 + project team. +\end{description} +These packages come with documentation and each of them is also +described in at least one of the books \emph{\LaTeXcomp} and +\emph{\LaTeXbook}. + +\subsubsection{Tools} + +This collection of packages includes, at least, the following (some +files may have slightly different names on certain systems): + +\begin{description} +\item[array] + Extended versions of the environments |array|, |tabular| + and |tabular*|, with many extra features. +\item[calc] +\NEWfeature{1996/12/01} + Enables the use of certain algebraic notation when specifying + values for lengths and counters. +\item[dcolumn] + Alignment on `decimal points' in tabular entries. Requires the + |array| package. +\item[delarray] + Adds `large delimiters' around arrays. Requires |array|. +\item[hhline] + Finer control over horizontal rules in tables. Requires |array|. +\item[longtable] + Multi-page tables. (Does not require |array|, but it uses the + extended features if both are loaded.) +\item[tabularx] + Defines a |tabularx| environment that is similar to |tabular*| + but it modifies the column widths, rather than the inter-column + space, to achieve the desired table width. +\item[afterpage] + Place text after the current page. +\item[bm] + Access bold math symbols. +\item[enumerate] + Extended version of the |enumerate| environment. +\item[fontsmpl] + Package and test file for producing `font samples'. +\item[ftnright] + Place all footnotes in the right-hand column in two-column mode. +\item[indentfirst] + Indent the first paragraph of sections, etc. +\item[layout] + Show the page layout defined by the current document class. +\item[multicol] + Typeset text in columns, with the length of the columns + `balanced'. +\item[rawfonts] + Preload fonts using the old internal font names of \LaTeX~2.09. + See Section~\ref{Sec:oldinternals}. +\item[somedefs] + Selective handling of package options. (Used by the rawfonts + package.) +\item[showkeys] + Prints the `keys' used by |\label|, |\ref|, |\cite| etc.; useful + whilst drafting. +\item[theorem] + Flexible declaration of `theorem-like' environments. +\item[varioref] + `Smart' handling of page references. +\item[verbatim] + Flexible extension of the verbatim environment. +\item[xr] + Cross reference other `external' documents. +\item[xspace] + `Smart space' command that helps you to avoid the common mistake + of missing spaces after command names. +\end{description} + + +\section{Commands} +\label{Sec:commands} + +This section describes the new commands available in \LaTeXe. +They are covered in more detail in \emph{\LaTeXbook} and in +\emph{\LaTeXcomp}. + +\subsection{Preamble commands} +\label{Sec:pre} + +The changes to the preamble commands are intentionally designed to make +\LaTeXe{} documents look clearly different from old documents. The +commands should be used only before |\begin{document}|. + +\begin{decl} +|\documentclass| \oarg{option-list} \arg{class-name} + \oarg{release-date} +\end{decl} + +This command replaces the +\LaTeX~2.09 command |\documentstyle|. + +There must be exactly one |\documentclass| command in a document; and +it should normally come before any other command. (There are some +exceptions, e.g., you can have |filecontents| environments before it +or |\RequirePackage| but these should be only used in special +scenarios as discussed elsewhere.) + +The \m{option-list} is a list of options, each of which may modify the +formatting of elements which are defined in the \m{class-name} file, +as well as those in all following |\usepackage| commands (see +below). + +The optional argument \m{release-date} can be used to specify the +earliest desired release date of the class file; it should contain a +date in the format \textsc{yyyy/mm/dd}. If a version of the class +older than this date is found, a warning is issued. + +For example, to specify a two-column article, using a version of +|article.cls| released after June 1994, you specify: +\begin{verbatim} + \documentclass[twocolumn]{article}[1994/06/01] +\end{verbatim} + +\begin{decl} +|\documentstyle| \oarg{option-list} \arg{class-name} +\end{decl} + +This command is still supported for compatibility with old files. It +is essentially the same as |\documentclass| except that it invokes +\emph{\LaTeX~2.09 compatibility mode}. It also causes any options in +the \m{option-list} that are not processed by the class file to be +loaded as packages after the class has been loaded. See +Section~\ref{Sec:209} for more details on \LaTeX~2.09 compatibility +mode. + +\begin{decl} +|\usepackage| \oarg{option-list} \arg{package-name} \oarg{release-date} +\end{decl} + +Any number of |\usepackage| commands is allowed. Each package file +(as denoted by \m{package-name}) defines new elements (or modifies +those defined in the class file loaded by the \m{class-name} argument +of the |\documentclass| command). A package file thus extends the +range of documents which can be processed. + +The \m{option-list} argument can contain a list of options, each of +which can modify the formatting of elements which are defined in this +\m{package-name} file. + +As above, \m{release-date} can contain the earliest desired release +date of the package file in the format \textsc{yyyy/mm/dd}; if an +older version of the package is found, a warning is issued. + +For example, to load the |graphics| package for the |dvips| driver, +using a version of |graphics.sty| released after June 1994, you write: +\begin{verbatim} + \usepackage[dvips]{graphics}[1994/06/01] +\end{verbatim} +Each package is loaded only once. If the same package is requested +more than once, nothing happens in the second or following attempt +unless the package has been requested with options that were not given +in the original |\usepackage|. If such extra options are specified +then an error message is produced. See Section~\ref{Sec:problems} how +to resolve this problem. + +As well as processing the options given in the \m{option-list} of the +|\usepackage| command, each package processes the +\m{option-list} of the |\documentclass| command as well. This +means that any option which should be processed by every package (to +be precise, by every package that specifies an action for it) can be +specified just once, in the |\documentclass| command, rather than +being repeated for each package that needs it. + +\begin{decl} +|\listfiles| +\end{decl} + +If this command is placed in the preamble then a list of the files +read in (as a result of processing the document) will be displayed +on the terminal (and in the log file) at the end of the run. Where +possible, a short description will also be produced. + +\NEWdescription{1995/12/01} +\emph{Warning}: this command will list only files which were read +using \LaTeX{} commands such as |\input|\arg{file} or +|\include|\arg{file}. If the file was read using the primitive \TeX{} +syntax |\input |\emph{file} (without |{ }| braces around the file name) +then it will not be listed; failure to use the \LaTeX{} form with the +braces can cause more severe problems, possibly leading to overwriting +important files, so \textbf{always put in the braces}. + + +\begin{decl} +|\setcounter{errorcontextlines}| \arg{num} +\end{decl} + +\TeX~3 introduced a new primitive |\errorcontextlines| which controls +the format of error messages. \LaTeXe\ provides an interface to this +through the standard |\setcounter| command. As most \LaTeX\ users do +not want to see the internal definitions of \LaTeX\ commands each time +they make an error, \LaTeXe{} sets this to $-1$ by default. + + +\subsection{Environments to write out support files} + +\NEWfeature{2019} +% +Until the \LaTeX\ release in 2019 the |filecontents| environment was +restricted to a place before the |\documentclass| command. These days +it can be used anywhere, though we still think that in most cases it is +best to only use it a the top of your document or in the preamble. + +\begin{decl} +|\begin{filecontents}| \oarg{option-list} \arg{file-name} \\ + \m{file-contents} \\ +|\end{filecontents}| +\end{decl} + +The |filecontents| environment is intended for bundling within a +single document file the contents of packages, options, or other +files. When the document file is run through \LaTeXe{} the body of +this environment is written verbatim (preceded by a comment line) to a +file whose name is given as the environment's only argument. However, +if that file already exists then nothing happens except for an +information message. + +These days most UTF-8 text characters can be used in a +|filecontents| envi\-ronment---they will be written unchanged to the +output file. However, tabs and form feeds produce a warning, +explaining that they are turned into spaces or blank lines, +respectively. + +By default the environment does not overwrite an existing file and it +even refuses to write out the data if there exists a file that is +anywhere in the path that \TeX\ searches when inputting files. With +the option |nosearch| you can ask it to look only into the current +directory and with the option |overwrite| (or |force|) you can request +it to write the file regardless. It will, however, never write to +|\jobname.tex| to avoid overwriting itself. + +The |filecontents| environment is used for including \LaTeX{} files. +For other plain text files (such as Encapsulated PostScript files), +you should use the |filecontents*| environment which does not add a +comment line. + + + + +\subsection{Document structure} + +The |book| document class introduces new commands to indicate +document structure. +\begin{decl} +|\frontmatter| \\ |\mainmatter| \\ |\backmatter| +\end{decl} +These commands indicate the beginning of the front matter (title page, +table of contents and prefaces), main matter (main text) and back +matter (bibliography, indexes and colophon). + +\subsection{Definitions} + +In \LaTeX, commands can have both mandatory and optional arguments, +for example in: +\begin{verbatim} + \documentclass[11pt]{article} +\end{verbatim} +the |11pt| argument is optional, whereas the |article| class name is +mandatory. + +In \LaTeX~2.09 users could define commands with arguments, but these +had to be mandatory arguments. With \LaTeXe, users can now define +commands and environments which also have one optional argument. + +\begin{decl} +|\newcommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\ +|\newcommand*| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\ +|\renewcommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\ +|\renewcommand*| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} +\end{decl} + +These commands have a new, second, optional argument; this is used for +defining commands which themselves take one optional argument. This +new argument is best introduced by means of a simple (and hence not +very practical) example: +\begin{verbatim} + \newcommand{\example}[2][YYY]{Mandatory arg: #2; + Optional arg: #1.} +\end{verbatim} +This defines |\example| to be a command with two arguments, referred +to as |#1| and |#2| in the \arg{definition}---nothing new so far. But +by adding a second optional argument to this |\newcommand| (the +|[YYY]|) the first argument (|#1|) of the newly defined command +|\example| is made optional with its default value being |YYY|. + +Thus the usage of |\example| is either: +\begin{verbatim} + \example{BBB} +\end{verbatim} +which prints: +\begin{quote} + Mandatory arg: BBB; + Optional arg: YYY. +\end{quote} +or: +\begin{verbatim} + \example[XXX]{AAA} +\end{verbatim} +which prints: +\begin{quote} + Mandatory arg: AAA; + Optional arg: XXX. +\end{quote} + +The default value of the optional argument is \texttt{YYY}. +This value is specified as the \oarg{default} argument of the +|\newcommand| that created |\example|. + +As another more useful example, the definition: +\begin{verbatim} + \newcommand{\seq}[2][n]{\lbrace #2_{0},\ldots,\,#2_{#1} \rbrace} +\end{verbatim} +means that the input |$\seq{a}$| produces +the formula $\lbrace a_{0},\ldots,\,a_{n} \rbrace$, +whereas the input |$\seq[k]{x}$| produces the formula +$\lbrace x_{0},\ldots,\,x_{k} \rbrace$. + +In summary, the command: +\begin{quote} + |\newcommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} +\end{quote} +defines \m{cmd} to be a command with \m{num} arguments, the first of +which is optional and has default value \m{default}. + +Note that there can only be one optional argument but, as before, +there can be up to nine arguments in total. + +\begin{decl} +|\newenvironment| + \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} \\ +|\newenvironment*| + \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} \\ +|\renewenvironment| + \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} \\ +|\renewenvironment*| + \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} +\end{decl} + +\LaTeXe\ also supports the creation of environments that have one +optional argument. Thus the syntax of these two commands has +been extended in the same way as that of |\newcommand|. + +\begin{decl} +|\providecommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\ +|\providecommand*| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} +\end{decl} + +This takes the same arguments as |\newcommand|. If \m{cmd} is already +defined then the existing definition is kept; but if it is currently +undefined then the effect of |\providecommand| is to define \m{cmd} +just as if |\newcommand| had been used. + +\NEWfeature{1994/12/01} + All the above five `defining commands' now have \texttt{*}-forms that + are usually the better form to use when defining commands with + arguments, unless any of these arguments is intended to contain + whole paragraphs of text. Moreover, if you ever do find yourself + needing to use the non-star form then you should ask whether + that argument would not better be treated as the contents of a + suitably defined environment. + +\NEWfeature{1995/12/01} + The commands produced by the above five `defining commands' are + now robust. + +\subsection{Boxes} + +These next three commands for making LR-boxes all existed in +\LaTeX~2.09. They have been enhanced in two ways. + +\begin{decl} +|\makebox| \oarg{width} \oarg{pos} \arg{text} \\ +|\framebox| \oarg{width} \oarg{pos} \arg{text} \\ +|\savebox| \arg{cmd} \oarg{width} \oarg{pos} \arg{text} +\end{decl} + +One small but far-reaching change for \LaTeXe\ is that, within the +\m{width} argument only, four special lengths can be used. These are +all dimensions of the box that would be produced by using simply +|\mbox|\arg{text}: +\begin{itemize} +\item [] |\height|\quad its height above the baseline; +\item [] |\depth|\quad its depth below the baseline; +\item [] |\totalheight|\quad the sum of |\height| and |\depth|; +\item [] |\width|\quad its width. +\end{itemize} +Thus, to put `hello' in the centre of a box of twice its natural +width, you would use: +\begin{verbatim} + \makebox[2\width]{hello} +\end{verbatim} +Or you could put \textit{f} into a square box, like +this: + \framebox{\makebox[\totalheight]{\itshape f\/}} +\begin{verbatim} + \framebox{\makebox[\totalheight]{\itshape f\/}} +\end{verbatim} +Note that it is the total width of the framed box, including the +frame, which is set to |\totalheight|. + +The other change is a new possibility for \m{pos}: |s| has been added +to |l| and |r|. If \m{pos} is |s| then the text is stretched the full +length of the box, making use of any `rubber lengths' (including any +inter-word spaces) in the contents of the box. If no such `rubber +length' is present, an `underfull box' will probably be produced. + +\begin{decl} +|\parbox| \oarg{pos} \oarg{height} \oarg{inner-pos} \arg{width} + \arg{text} \\ +|\begin{minipage}| + \oarg{pos} \oarg{height} \oarg{inner-pos} \arg{width}\\ +\m{text}\\ +|\end{minipage}| +\end{decl} + +As for the box commands above, |\height|, |\width|, etc.~may be used +in the \oarg{height} argument to denote the natural dimensions of the +box. + +The \m{inner-pos} argument is new in \LaTeXe. It is the vertical +equivalent to the \m{pos} argument for |\makebox|, etc, determining +the position of \m{text} within the box. The \m{inner-pos} may be any +one of |t|, |b|, |c|, or |s|, denoting top, bottom, centered, or +`stretched' alignment respectively. When the \m{inner-pos} argument +is not specified, \LaTeX\ gives it same value as \m{pos} (this could be +the latter's default value). + + +\begin{decl} +|\begin{lrbox}| \arg{cmd}\\ +\m{text}\\ +|\end{lrbox}| +\end{decl} + +This is an environment which does not directly print anything. +Its effect is to save the typeset \m{text} in the bin \m{cmd}. Thus +it is like |\sbox| \arg{cmd} \arg{text}, except that any white space +before or after the contents \m{text} is ignored. + +This is very useful as it enables both the |\verb| command and the +\texttt{verbatim} environment to be used within \m{text}. + +It also makes it possible to define, for example, a `framed box' +environment. This is done by first using this environment to save +some text in a bin \m{cmd} and then calling +|\fbox{\usebox{|\m{cmd}|}}|. + +The following example defines an environment, called |fmpage|, that is +a framed version of |minipage|. +\begin{verbatim} + \newsavebox{\fmbox} + \newenvironment{fmpage}[1] + {\begin{lrbox}{\fmbox}\begin{minipage}{#1}} + {\end{minipage}\end{lrbox}\fbox{\usebox{\fmbox}}} +\end{verbatim} + + +\subsection{Measuring things} + +The first of these next commands was in \LaTeX~2.09. The two new +commands are the obvious analogues. + +\begin{decl} +|\settowidth| \arg{length-cmd} \arg{lr text} \\ +|\settoheight| \arg{length-cmd} \arg{lr text} \\ +|\settodepth| \arg{length-cmd} \arg{lr text} +\end{decl} + +\subsection{Line endings} + +\NEWdescription{1994/12/01} +The command |\\|, which is used to indicate a line-end in various +places, is now a robust command when used within arguments such as +section titles. + +Also, because it is often necessary to distinguish which type of line +is to be ended, we have introduced the following new command; it +has the same argument syntax as that of |\\|. +\begin{decl}[1994/12/01] +|\tabularnewline| \oarg{vertical-space} +\end{decl} +One example of its use is when the text in the last +column of a |tabular| environment is set with |\raggedright|; then +|\tabularnewline| can be used to indicate the end of a row of the +|tabular|, whilst |\\| will indicate the end of a line of text in a +paragraph within the column. This command can be used in the |array| +environment as well as |tabular|, and also the extended versions of +these environments offered by the \textsf{array} and \textsf{longtable} +packages in the tools collection. + +\subsection{Controlling page breaks} + +Sometimes it is necessary, for a final version of a document, to +`help' \LaTeX\ break the pages in the best way. \LaTeX~2.09 had a +variety of commands for this situation: |\clearpage|, |\pagebreak| +etc. \LaTeXe\ provides, in addition, commands which can produce +longer pages as well as shorter ones. + + +\begin{decl} +|\enlargethispage| \arg{size} \\ +|\enlargethispage*| \arg{size} +\end{decl} + +These commands increase the height of a page (from its normal value of +|\textheight|) by the specified amount \m{size}, a rigid length. This +change affects \emph{only} the current page. + +This can be used, for example, to allow an extra line to be fitted +onto the page or, with a negative length, to produce a page +shorter than normal. + +The star form also shrinks any vertical white space on the page as +much as possible, so as to fit the maximum amount of text on the +page. + +\NEWdescription{1995/12/01} +These commands do not change the position of the footer text; thus, if +a page is lengthened too far, the main text may overprint the footer. + +\subsection{Floats} + +There is a new command, |\suppressfloats|, and a new `float +specifier'. These will enable people to gain better +control of \LaTeX's float placement algorithm. + +\begin{decl} +|\suppressfloats| \oarg{placement} +\end{decl} + +This command stops any further floating environments from being placed +on the current page. With an optional argument, which should be either +|t| or |b| (not both), this restriction applies only to putting +further floats at the top or at the bottom. Any floats which would +normally be placed on this page are placed on the next page instead. + +\begin{decl} +The extra float location specifier: \ \texttt{!} +\end{decl} + +This can be used, along with at least one of \texttt{h}, \texttt{t}, +\texttt{b} and \texttt{p}, in the location optional argument of a +float. + +If a \texttt{!} is present then, just for this particular float, +whenever it is processed by the float mechanism the following are +ignored: +\begin{itemize} +\item all restrictions on the number of floats which can appear; +\item all explicit restrictions on the amount of space on a text page +which may be occupied by floats or must be occupied by text. +\end{itemize} +The mechanism will, however, still attempt to ensure that pages are +not overfull and that floats of the same type are printed in the +correct order. + +Note that its presence has no effect on the production of float pages. + +A \texttt{!} specifier overrides the effect of any |\suppressfloats| +command for this particular float. + +\subsection{Font changing: text} + +The font selection scheme used in \LaTeXe{} differs a lot from that +used in \LaTeX~2.09. In this section, we give a brief description of +the new commands. A more detailed description with examples is given +in \emph{\LaTeXcomp}, and the interface for class- and package-writers +is described in \emph{\fntguide}. + +\begin{decl} +|\normalfont|\\ +|\rmfamily|\\ +|\sffamily|\\ +|\ttfamily|\\ +|\mdseries|\\ +|\bfseries|\\ +|\upshape|\\ +|\itshape|\\ +|\slshape|\\ +|\scshape| +\end{decl} + +These are font commands whose use is the same as the commands |\rm|, +|\bf|, etc. The difference is that each command changes just one +attribute of the font (the attribute changed is part of the name). +One result of this is that, for example, |\bfseries\itshape| produces +both a change of series and a change of shape, to give a bold italic +font. + +\begin{decl} +|\textnormal|\arg{text}\\ +|\textrm|\arg{text}\\ +|\textsf|\arg{text}\\ +|\texttt|\arg{text}\\ +|\textmd|\arg{text}\\ +|\textbf|\arg{text}\\ +|\textup|\arg{text}\\ +|\textit|\arg{text}\\ +|\textsl|\arg{text}\\ +|\textsc|\arg{text}\\ +|\emph|\arg{text} +\end{decl} + +These are one-argument commands; they take as an argument the +text which is to be typeset in the particular font. They also +automatically insert italic corrections where appropriate; if you do +not like the result, you can add an italic correction with |\/| or +remove it with |\nocorr|. The |\nocorr| should always be the first or +last thing within the \arg{text} argument. + +\subsection{Font changing: math} + +Most of the fonts used within math mode do not need to be explicitly +invoked; but to use letters from a range of fonts, the following +class of commands is provided. + +\begin{decl} +|\mathrm| \arg{letters}\\ +|\mathnormal| \arg{letters}\\ +|\mathcal| \arg{letters}\\ +|\mathbf| \arg{letters}\\ +|\mathsf| \arg{letters}\\ +|\mathtt| \arg{letters}\\ +|\mathit| \arg{letters} +\end{decl} + +These are also one-argument commands which take as an argument the +letters which are to be typeset in the particular font. The argument +is processed in math mode so spaces within it will be ignored. Only +letters, digits and accents have their font changed, for example +|$\mathbf{\tilde A \times 1}$| produces $\mathbf{\tilde A \times 1}$. + +\subsection{Ensuring math mode} + +\begin{decl} +|\ensuremath| \arg{math commands} +\end{decl} + +In \LaTeX~2.09, if you wanted a command to work both in math mode and +in text mode, the suggested method was to define something like: +\begin{verbatim} + \newcommand{\Gp}{\mbox{$G_p$}} +\end{verbatim} +Unfortunately, the |\mbox| stops |\Gp| changing size correctly in (for +instance) subscripts or a fraction. + +In \LaTeXe{} you can define it thus: +\begin{verbatim} + \newcommand{\Gp}{\ensuremath{G_p}} +\end{verbatim} +Now |\Gp| will work correctly in all contexts. + +This is because the |\ensuremath| does nothing, producing simply +|G_p|, when |\Gp| is used within math mode; but it ensures that math +mode is entered (and exited) as required when |\Gp| is used in text +mode. + + +\subsection{Setting text superscripts} + +\begin{decl} +|\textsuperscript| \arg{text} +\end{decl} + +\NEWfeature{1995/06/01} In \LaTeX~2.09 textual superscripts such as +footnote markers were produced by internally entering math mode and +typesetting the number as a math superscript. This normally looked +fine since the digits in math fonts are the same as those in text +fonts when Computer Modern fonts are used. But when a different +document font (such as Times) is selected, the results look rather +strange. For this reason the command |\textsuperscript| has been +introduced which typesets its argument in the current text font, in a +superscript position and in the correct size. + +\subsection{Text commands: all encodings} + +\NEWdescription{1994/12/01} + One of the main differences between \LaTeXe{} and \LaTeX~2.09 is + that \LaTeXe{} can deal with fonts in arbitrary \emph{encodings}. + (A font encoding is the sequence of characters in the font---for + example a Cyrillic font would have a different encoding from a Greek + font.) + + The two major font encodings that are used for Latin languages such + as English or German are |OT1| (Donald Knuth's 7-bit encoding, which + has been used during most of \TeX's lifetime) and |T1| (the new + 8-bit `Cork' encoding). + + \LaTeX~2.09 only supported the |OT1| encoding, whereas \LaTeXe{} has + support for both |OT1| and |T1| built-in. The next section will + cover the new commands which are available if you have |T1|-encoded + fonts. This section describes new commands which are available in + all encodings. + + Most of these commands provide characters which were available in + \LaTeX~2.09 already. For example |\textemdash| gives an `em dash', + which was available in \LaTeX~2.09 by typing |---|. However, some + fonts (for example a Greek font) may not have the |---| ligature, + but you will still be able to access an em dash by typing + |\textemdash|. + +\begin{decl}[1994/12/01] + |\r{}| +\end{decl} + This command gives a `ring' accent, for example `\r{o}' can be typed + |\r{o}|. + +\begin{decl}[1994/12/01] + |\SS| +\end{decl} + This command produces a German `SS', that is a capital `\ss'. This + letter can hyphenate differently from `SS', so is needed for entering + all-caps German. + +\begin{decl}[1994/12/01] + |\textcircled{}| +\end{decl} + This command is used to build `circled characters' such as + |\copyright|. For example |\textcircled{a}| produces + \textcircled{a}. + +\begin{decl}[1994/12/01] + |\textcompwordmark| +\end{decl} + This command is used to separate letters which would normally + ligature. For example `f\textcompwordmark i' is produced with + |f\textcompwordmark i|. Note that the `f' and `i' have not + ligatured to produce `fi'. This is rarely useful in English + (`shelf\textcompwordmark ful' is a rare example of where it might be + used) but is used in languages such as German. + +\begin{decl}[1994/12/01] + |\textvisiblespace| +\end{decl} + This command produces a `visible space' character + `\textvisiblespace'. This is sometimes used in computer listings, + for example `type \textsf{hello\textvisiblespace world}'. + +\begin{decl}[1994/12/01] + |\textemdash| + |\textendash| + |\textexclamdown| + |\textquestiondown| \\ + |\textquotedblleft| + |\textquotedblright| + |\textquoteleft| + |\textquoteright| +\end{decl} + These commands produce characters which would otherwise be + accessed via ligatures: + \begin{center} + \begin{tabular}{ccl} + \emph{ligature} & \emph{character} & \emph{command} \\ + |---| & --- & |\textemdash| \\ + |--| & -- & |\textendash| \\ + |!`| & !` & |\textexclamdown| \\ + |?`| & ?` & |\textquestiondown| \\ + |``| & `` & |\textquotedblleft| \\ + |''| & '' & |\textquotedblright| \\ + |`| & ` & |\textquoteleft| \\ + |'| & ' & |\textquoteright| + \end{tabular} + \end{center} + The reason for making these characters directly accessible is so + that they will work in encodings which do not have these characters. + +\begin{decl}[1994/12/01] + |\textbullet| + |\textperiodcentered| +\end{decl} + These commands allow access to characters which were previously only + available in math mode: + \begin{center} + \begin{tabular}{lcl} + \emph{math command} & \emph{character} & \emph{text command} \\ + |\bullet| & $\bullet$ & |\textbullet| \\ + |\cdot| & $\cdot$ & |\textperiodcentered| + \end{tabular} + \end{center} + +\begin{decl}[1995/12/01] + |\textbackslash| + |\textbar| + |\textless| + |\textgreater| +\end{decl} + These commands allow access to ASCII characters which were + only available in verbatim or math mode: + \begin{center} + \begin{tabular}{lcl} + \emph{math command} & \emph{character} & \emph{text command} \\ + |\backslash| & $\backslash$ & |\textbackslash| \\ + |\mid| & $\mid$ & |\textbar| \\ + |<<| & $<$ & |\textless| \\ + |>>| & $>$ & |\textgreater| + \end{tabular} + \end{center} + +\begin{decl}[1995/12/01] + |\textasciicircum| + |\textasciitilde| +\end{decl} + These commands allow access to ASCII characters which were + previously only available in verbatim: + \begin{center} + \begin{tabular}{cl} + \emph{verbatim} & \emph{text command} \\ + |^| & |\textasciicircum| \\ + |~| & |\textasciitilde| + \end{tabular} + \end{center} + +\begin{decl}[1995/12/01] + |\textregistered| + |\texttrademark| +\end{decl} + These commands provide the `registered trademark' (R) and + `trademark' (TM) symbols. + +\subsection{Text commands: the T1 encoding} + +\NEWdescription{1994/12/01} + The |OT1| font encoding is fine for typesetting in English, but has + problems when typesetting other languages. The |T1| encoding solves + some of these problems, by providing extra characters (such as `eth' + and `thorn'), and it allows words containing accented letters to be + hyphenated (as long as you have a package like |babel| which allows + for non-American hyphenation). + + This section describes the commands you can use if you have the |T1| + fonts. To use them, you need to get the `ec fonts', or the + |T1|-encoded PostScript fonts, as used by \textsf{psnfss}. + All these fonts are + available by anonymous ftp in the Comprehensive \TeX{} Archive, and + are also available on the CD-ROMs \emph{4all \TeX} and + \emph{\TeX{} Live} (both available from the \TeX{} Users Group). + + You can then select the |T1| fonts by saying: +\begin{verbatim} + \usepackage[T1]{fontenc} +\end{verbatim} + This will allow you to use the commands in this section. + + \emph{Note:} Since this document must be processable on any site + running an up-to-date \LaTeX, it does not contain any characters + that are present only in |T1|-encoded fonts. This means that this + document cannot show you what these glyphs look like! If you want + to see them then run \LaTeX{} on the document |fontsmpl| and + respond `|cmr|' when it prompts you for a family name. + +\begin{decl}[1994/12/01] + |\k{}| +\end{decl} + This command produces an `ogonek' accent. + +\begin{decl}[1994/12/01] + |\DH| + |\DJ| + |\NG| + |\TH| + |\dh| + |\dj| + |\ng| + |\th| +\end{decl} + These commands produce characters `eth', `dbar', `eng', and `thorn'. + +\begin{decl}[1994/12/01] + |\guillemotleft| + |\guillemotright| + |\guilsinglleft| + |\guilsinglright| \\ + |\quotedblbase| + |\quotesinglbase| + |\textquotedbl| +\end{decl} + % A local hack (could be improved): + \newcommand{\fauxguillemet}[1]{$\vcenter{\hbox{$\scriptscriptstyle#1$}}$} + These commands produce various sorts of quotation mark. + Rough representations of them are: + \fauxguillemet\ll a\fauxguillemet\gg{} + \fauxguillemet + ,\kern -0.1em,\kern 0.05em a\kern -0.05em`` + ,\kern 0.05em a\kern -0.05em` and |"|a|"|. + +\NEWdescription{2001/06/01} + There are therefore some extra short-form ligatures available for + use in documents that will only be used with |T1|-encoded fonts. + + The guillemets |\guillemotleft| and |\guillemotright|% + \footnote{We apologise once again for maintaining Adobe's + enormous solipsism~(sic) of confusing a diving bird with + punctuation marks!} + can be obtained by typing |<<<<| and |>>>>| and |\quotedblbase| + by typing |,,|\,. + + Also, unlike the unexpected results with + |OT1|-encoded fonts, |<<| and |>>| will produce \textless{} and + \textgreater{}. + + Note also that the single character |"| will no longer produce '' + but rather |\textquotedbl|. + +\subsection{Logos} + +\begin{decl} +|\LaTeX|\\ +|\LaTeXe| +\end{decl} + +|\LaTeX| (producing `\LaTeX') is still the `main' logo command, +but if you need to refer to the new features, you can write +|\LaTeXe| (producing `\LaTeXe'). + +\subsection{Picture commands} + +\begin{decl} + |\qbezier[](,)(,)(,)| \\ + | \bezier{}(,)(,)(,)| +\end{decl} +The |\qbezier| command can be used in |picture| mode to draw a +quadratic Bezier curve from position |(,)| to |(,)| with +control point |(,)|. The optional argument \m{N} gives the +number of points on the curve. + +For example, the diagram: +\begin{center} + \begin{picture}(50,50) + \thicklines + \qbezier(0,0)(0,50)(50,50) + \qbezier[20](0,0)(50,0)(50,50) + \thinlines + \put(0,0){\line(1,1){50}} + \end{picture} +\end{center} +is drawn with: +\begin{verbatim} + \begin{picture}(50,50) + \thicklines + \qbezier(0,0)(0,50)(50,50) + \qbezier[20](0,0)(50,0)(50,50) + \thinlines + \put(0,0){\line(1,1){50}} + \end{picture} +\end{verbatim} +The |\bezier| command is the same, except that the argument \m{N} is not +optional. It is provided for compatibility with the \LaTeX~2.09 +|bezier| document style option. + +\subsection{Old commands} + +\begin{decl} +|\samepage| +\end{decl} + +The |\samepage| command still exists but is no longer being +maintained. +This is because it only ever worked erratically; it does not +guarantee that there will be no page-breaks within its scope; and +it can cause footnotes and marginals to be wrongly placed. + +We recommend using |\enlargethispage| in conjunction with page-break +commands such as |\newpage| and |\pagebreak| to help control page +breaks. + +\begin{decl} + |\SLiTeX| +\end{decl} +Since \SLiTeX{} no longer exists, the logo is no longer defined in the +\LaTeX{} kernel. A suitable replacement is |\textsc{Sli\TeX}|. The +\SLiTeX{} logo is defined in \LaTeX~2.09 compatibility mode. + +\begin{decl} +|\mho| |\Join| |\Box| |\Diamond| |\leadsto| \\ +|\sqsubset| |\sqsupset| |\lhd| |\unlhd| |\rhd| |\unrhd| +\end{decl} + +These symbols are contained in the \LaTeX{} symbol font, which was +automatically loaded by \LaTeX~2.09. However, \TeX{} has room for +only sixteen math font families; thus many users discovered that they +ran out. Because of this, \LaTeX{} does not load the \LaTeX{} symbol +font unless you use the \textsf{latexsym} package. + +These symbols are also made available, using different fonts, by the +\textsf{amsfonts} package, which also defines a large number of other +symbols. It is supplied by the American Mathematical Society. + +The \textsf{latexsym} package is loaded automatically in \LaTeX~2.09 +compatibility mode. + +\section{\LaTeX~2.09 documents} +\label{Sec:209} + +\LaTeXe{} can process (almost) any \LaTeX~2.09 document, by entering +\emph{\LaTeX~2.09 compatibility mode}. Nothing has changed, you run +\LaTeX{} in the same way you always did, and you will get much the +same results. + +The reason for the `almost' is that some \LaTeX~2.09 packages made use +of low-level unsupported features of \LaTeX. If you discover such a +package, you should find out if it has been updated to work with +\LaTeXe. Most packages will still work with \LaTeXe---the easiest way +to find out whether a package still works is to try it! + +\LaTeX~2.09 compatibility mode is a comprehensive emulation of +\LaTeX~2.09, but at the cost of time. Documents can run up to 50\% +slower in compatibility mode than they did under \LaTeX~2.09. +In addition, many of the new features of \LaTeXe{} are not available in +\LaTeX~2.09 compatibility mode. + +\subsection{Warning} + +\NEWdescription{1995/12/01} +This \emph{\LaTeX~2.09 compatibility mode} is provided solely to allow +you to process 2.09 documents, i.e.~documents that were written (we +hope, a long time ago) for a very old system and therefore could be +processed by using a genuine antique \LaTeX~2.09 system. + +This mode is therefore \emph{not} intended to provide access to the +enhanced features of \LaTeXe{}. Thus it must not be used to process +new documents which masquerade as 2.09 documents (i.e.~they begin with +|\documentstyle|) but which could not be processed using that genuine +antique \LaTeX~2.09 system because they contain some new, +\LaTeXe{}-only, commands or environments. + +To prevent such misuse of the system, and the consequent trouble it +causes when such misleadingly encoded documents are distributed, the +\emph{\LaTeX~2.09 compatibility mode} turns off most of these new +features and commands. Any attempt to use them will give you an error +message and, moreover, many of them simply will not work, whilst +others will produce unpredictable results. +So don't bother sending us any bug reports about such occurrences since +they are intentional. + + +\subsection{Font selection problems} +\label{Sec:fsprob} + +When using compatibility mode, it is possible that you will find +problems with font-changing commands in some old documents. These +problems are of two types: + +\begin{itemize} +\item producing error messages; +\item not producing the font changes you expected. +\end{itemize} + +In case of error messages it is possible that the document (or an old +style file used therein) contains references to old internal commands +which are no longer defined, see Section~\ref{Sec:oldinternals} for +more information if this is the case. + +\NEWdescription{1995/12/01} +One example of the unexpected is if you use one of the new style of +math-mode font changing command as follows: +\begin{verbatim} +$ \mathbf{xy} A $ +\end{verbatim} +You may well find that this behaves as if you had put: +\begin{verbatim} +$ \bf {xy} A $ +\end{verbatim} +everything including the $A$ coming out bold. + +\LaTeX~2.09 allowed sites to customize their \LaTeX{} installation, +which resulted in documents producing different results on different +\LaTeX{} installations. \LaTeXe{} no longer allows so much +customization but, for compatibility with old documents, the local +configuration file |latex209.cfg| is loaded every time \LaTeXe{} +enters \LaTeX~2.09 compatibility mode. + +For example, if your site was customized to use the New Font +Selection Scheme (\NFSS) with the |oldlfont| option, then you can +make \LaTeXe{} emulate this by creating a |latex209.cfg| file +containing the commands: +\begin{verbatim} +\ExecuteOptions{oldlfont}\RequirePackage{oldlfont} +\end{verbatim} +Similarly, to emulate \NFSS{} with the |newlfont| option, you can +create a |latex209.cfg| file containing: +\begin{verbatim} +\ExecuteOptions{newlfont}\RequirePackage{newlfont} +\end{verbatim} + + +\subsection{Native mode} +\label{Sec:native} + +To run an old document faster, and use the new features of +\LaTeXe, you should try using \emph{\LaTeXe{} native mode}. +This is done by replacing the command: +\begin{quote} + |\documentstyle[|\m{options}|,|\m{packages}|]|\arg{class} +\end{quote} +with: +\begin{quote} + |\documentclass|\oarg{options}\arg{class} \\ + |\usepackage{latexsym,|\m{packages}|}| +\end{quote} +However, some documents which can be processed in \LaTeX~2.09 +compatibility mode may not work in native mode. Some \LaTeX~2.09 +packages will only work with \LaTeXe{} in 2.09 compatibility mode. +Some documents will cause errors because of \LaTeXe's improved error +detection abilities. + +But most \LaTeX~2.09 documents can be processed by \LaTeXe{}'s native +mode with the above change. Again, the easiest way to find out +whether your documents can be processed in native mode is to try it! + + +\section{Local modifications} +\label{sec:loc} + +\NEWdescription{1995/12/01} +There are two common types of local modifications that can be done +very simply. Do not forget that documents produced using such +modifications will not be usable at other places (such documents are +called `non-portable'). + +One type of modification is the use of personal commands for commonly +used symbols or constructions. These should be put into a package +file (for example, one called \texttt{mymacros.sty}) and loaded by +putting |\usepackage{mymacros}| in the document preamble. + +Another type is a local document class that is very similar to one of +the standard classes but contains some straightforward modifications +such as extra environments, different values for some parameters, etc. +These should be put into a class file; here we shall describe a simple +method of constructing such a file using, as an example, a class +called \textsf{larticle} that is very similar to the \textsf{article} +class. + +\NEWfeature{1995/12/01} +The class file called \texttt{larticle.cls} should (after the +preliminary identification commands) start as follows: +\begin{verbatim} + \LoadClassWithOptions{article} +\end{verbatim} +This command should be followed by whatever additions and changes you +wish to make to the results of reading in the file +\texttt{article.sty}. + +The effect of using the above |\LoadClassWithOptions| command is to +load the standard class file \textsf{article} with whatever options +are asked for by the document. Thus a document using your +\textsf{larticle} class can specify any option that could be specified +when using the standard \textsf{article} class; for example: +\begin{verbatim} + \documentclass[a4paper,twocolumn,dvips]{larticle} +\end{verbatim} + + +\section{Problems} +\label{Sec:problems} + +This section describes some of the things which may go wrong when +using \LaTeXe, and what you can do about it. + +\subsection{New error messages} + +\LaTeXe{} has a number of new error messages. +Please also note that many error messages now produce further helpful +information if you press |h| in response to the error prompt. + +\begin{decl} +|Option clash for package |\m{package}|.| +\end{decl} +The named package has been loaded twice with different options. If +you enter |h| you will be told what the options were, for example, if +your document contained: +\begin{verbatim} + \usepackage[foo]{fred} + \usepackage[baz]{fred} +\end{verbatim} +then you will get the error message: +\begin{verbatim} + Option clash for package fred. +\end{verbatim} +and typing |h| at the |?| prompt will give you: +\begin{verbatim} + The package fred has already been loaded with options: + [foo] + There has now been an attempt to load it with options: + [baz] + Adding the line: + \usepackage[foo,baz]{fred} + to your document may fix this. + Try typing <> to proceed. +\end{verbatim} +The cure is, as suggested, to load the package with both sets of +options. Note that since \LaTeX{} packages can call other packages, +it is possible to get a package option clash without explicitly +requesting the same package twice. + +\begin{decl} + |Command |\m{command}| not provided in base NFSS.| +\end{decl} +The \m{command} is not provided by default in \LaTeXe. This error is +generated by using one of the commands: +\begin{verbatim} + \mho \Join \Box \Diamond \leadsto + \sqsubset \sqsupset \lhd \unlhd \rhd \unrhd +\end{verbatim} +which are now part of the \textsf{latexsym} package. +The cure is to add: +\begin{verbatim} + \usepackage{latexsym} +\end{verbatim} +in the preamble of your document. + +\begin{decl} + |LaTeX2e command in LaTeX 2.09 document.| +\end{decl} +The \m{command} is a \LaTeXe{} command but this is a \LaTeX~2.09 +document. The cure is to replace the command by a \LaTeX~2.09 +command, or to run document in native mode, as described in +Section~\ref{Sec:native}. + +\begin{decl} + |NFSS release 1 command \newmathalphabet found.| +\end{decl} +The command |\newmathalphabet| was used by the New Font Selection +Scheme Release 1 but it has now been replaced by +|\DeclareMathAlphabet|, the use of which is described in +\emph{\fntguide}. + +The best cure is to update the package which contained the +|\newmathalphabet| command. Find out if there is a new release of +the package, or (if you wrote the package yourself) consult +\emph{\fntguide} for the new syntax of font commands. + +If there is no updated version of the package then you can cure this +error by using the \textsf{newlfont} or \textsf{oldlfont} package, +which tells \LaTeX{} which version of |\newmathalphabet| should be +emulated. + +You should use \textsf{oldlfont} if the document selects math fonts with +syntax such as this: +\begin{quote} + |{\cal A}|, etc. +\end{quote} +Use \textsf{newlfont} if the document's syntax is like this: +\begin{quote} + |\cal{A}|, etc. +\end{quote} + + +\begin{decl} + |Text for \verb command ended by end of line.| +\end{decl} +The |\verb| command has been begun but not ended on that line. This +usually means that you have forgotten to put in the end-character of +the |\verb| command. + +\begin{decl} + |Illegal use of \verb command.| +\end{decl} +The |\verb| command has been used inside the argument of another +command. This has never been allowed in \LaTeX{}---often producing +incorrect output without any warning---and so \LaTeXe{} produces +an error message. + +\subsection{Old internal commands} +\label{Sec:oldinternals} + +A number of \LaTeX~2.09 internal commands have been removed, since +their functionality is now provided in a different way. See +\emph{\clsguide} for more details of the new, supported interface for +class and package writers. + +\begin{decl} + |\tenrm| |\elvrm| |\twlrm| \dots\\ + |\tenbf| |\elvbf| |\twlbf| \dots\\ + |\tensf| |\elvsf| |\twlsf| \dots\\ + $\vdots$ +\end{decl} +These commands provided access to the seventy fonts preloaded by +\LaTeX~2.09. In contrast, \LaTeXe{} normally preloads at most +fourteen fonts, which saves a lot of font memory; but a consequence is +that any \LaTeX{} file which used the above commands to directly +access fonts will no longer work. + +Their use will usually produce an error message such as: +\begin{verbatim} + ! Undefined control sequence. + l.5 \tenrm +\end{verbatim} +The cure for this is to update the document to use the new +font-changing commands provided by \LaTeXe; these are described in +\emph{\fntguide}. + +If this is not possible then, as a last resort, you can +use the \textsf{rawfonts} package, which loads the +seventy \LaTeX~2.09 fonts and provides direct access to them using the +old commands. This takes both time and memory. If you do not +wish to load all seventy fonts, you can select some of them by using the +|only| option to \textsf{rawfonts}. For example, to load only |tenrm| +and |tenbf| you write: +\begin{verbatim} + \usepackage[only,tenrm,tenbf]{rawfonts} +\end{verbatim} + +The \textsf{rawfonts} package is distributed as part of the \LaTeX{} +tools software, see Section~\ref{Sec:st-pack}. + +\subsection{Old files} + +One of the more common mistakes in running \LaTeX{} is to read in old +versions of packages instead of the new versions. If you get an +incomprehensible error message from a standard package, make sure you +are loading the most recent version of the package. You can find out +which version of the package has been loaded by looking in the log +file for a line like: +\begin{verbatim} + Package: fred 1994/06/01 v0.01 Fred's package. +\end{verbatim} +You can use the \m{release-date} options to |\documentclass| and +|\usepackage| to make sure that you are getting a suitably recent copy +of the document class or package. This is useful when sending a +document to another site, which may have out-of-date software. + +\subsection{Where to go for more help} + +If you can't find the answer for your problem here, try looking in +\emph{\LaTeXbook} or \emph{\LaTeXcomp}. If you have a problem with +installing \LaTeX, look in the installation guide files which come with +the distribution. + +If this doesn't help, contact your local \LaTeX{} guru or local +\LaTeX{} mailing list. + +If you think you've discovered a bug then please report it! First, +you should find out if the problem is with a third-party package or +class. If the problem is caused by a package or class other than +those listed in Section~\ref{Sec:class+packages} then please report +the problem to the author of the package or class, not to the \LaTeX3 +project team. + +If the bug really is with core \LaTeX{} then you should create a +\emph{short}, \emph{self-contained} document which exhibits the +problem. You should run a \emph{recent} (less than a year old) +version of \LaTeX{} on the file and then run \LaTeX{} on +|latexbug.tex|. This will create an error report which you should +send, together with the sample document and log file, to the +\LaTeX{} bugs address which can be found in the file +|latexbug.tex| or |bugs.txt|. + + +\section{Enjoy!} +\label{Sec:enjoy} + +We certainly hope you will enjoy using the new standard \LaTeX{} but, +if this is not possible, we hope that you will enjoy success and +fulfillment as a result of the documents which it will help you to +create. + +If you find that the contribution of \LaTeX{} to your life is such +that you would like to support the work of the project team, then +please read Section~\ref{Sec:ltx3} and discover practical ways to do +this. + +\begin{thebibliography}{1} + +\bibitem{A-W:GRM97} +Michel Goossens, Sebastian Rahtz and Frank Mittelbach. +\newblock {\em The {\LaTeX} Graphics Companion}. +\newblock Addison-Wesley, Reading, Massachusetts, 1997. + + +\bibitem{A-W:GR99} +Michel Goossens and Sebastian Rahtz. +\newblock {\em The {\LaTeX} Web Companion}. +\newblock Addison-Wesley, Reading, Massachusetts, 1999. + + +\bibitem{A-W:DEK91} +Donald~E. Knuth. +\newblock {\em The \TeX book}. +\newblock Addison-Wesley, Reading, Massachusetts, 1986. +\newblock Revised to cover \TeX3, 1991. + + +\bibitem{A-W:LLa94} +Leslie Lamport. +\newblock {\em {\LaTeX:} A Document Preparation System}. +\newblock Addison-Wesley, Reading, Massachusetts, second edition, 1994. + +\bibitem{A-W:MG2004} +Frank Mittelbach and Michel Goossens. +\newblock {\em The {\LaTeX} Companion second edition}. +\newblock With Johannes Braams, David Carlisle, and Chris Rowley. +\newblock Addison-Wesley, Reading, Massachusetts, 2004. + + +\end{thebibliography} + +\end{document} diff --git a/macros/latex/base/usrguide.pdf b/macros/latex/base/usrguide.pdf index e07b34bdac..ae46e5ba7b 100644 Binary files a/macros/latex/base/usrguide.pdf and b/macros/latex/base/usrguide.pdf differ diff --git a/macros/latex/base/usrguide.tex b/macros/latex/base/usrguide.tex index dfdf9443e6..32e12a1397 100644 --- a/macros/latex/base/usrguide.tex +++ b/macros/latex/base/usrguide.tex @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% Copyright (C) 1993-2022 +% Copyright (C) 2020-2022 % The LaTeX Project and any individual authors listed elsewhere % in this file. % @@ -28,18 +28,44 @@ % \fi % Filename: usrguide.tex -\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\documentclass{ltxguide} -\documentclass{ltxguide}[2001/05/28] +\usepackage[T1]{fontenc} % needed for \textbackslash in tt +\usepackage{csquotes} -\title{\LaTeXe~for authors} +\title{\LaTeX\ for authors --- current version} +\author{\copyright~Copyright 2020-2022, \LaTeX\ Project Team.\\ + All rights reserved.% + \footnote{This file may distributed and/or modified under the + conditions of the \LaTeX{} Project Public License, either version 1.3c + of this license or (at your option) any later version. See the source + \texttt{usrguide.tex} for full details.}% +} -\author{\copyright~Copyright 1995--2020, \LaTeX\ Project Team.\\ - All rights reserved.} +\date{2022-07-05} -\date{25 May 2020} +\NewDocumentCommand\cs{m}{\texttt{\textbackslash\detokenize{#1}}} +\NewDocumentCommand\marg{m}{\arg{#1}} +\NewDocumentCommand\meta{m}{\ensuremath{\langle}\textit{#1}\ensuremath{\rangle}} +\NewDocumentCommand\pkg{m}{\textsf{#1}} +\NewDocumentCommand\text{m}{\ifmmode\mbox{#1}\else#1\fi} +% Fix a 'feature' +\makeatletter +\renewcommand \verbatim@font {\normalfont \ttfamily} +\makeatother +% for fpeval documentation + +\providecommand\fpop[1]{\mathop{\texttt{#1}}} +\providecommand\fpbin[1]{\mathbin{\texttt{#1}}} +\providecommand\fprel[1]{\mathrel{\texttt{#1}}} +\providecommand\nan{\texttt{NaN}} + +\ExplSyntaxOn +\ProvideExpandableDocumentCommand \fpeval { m } { \fp_eval:n {#1} } +\ExplSyntaxOff + \begin{document} \maketitle @@ -48,1780 +74,1133 @@ \section{Introduction} -Welcome to \LaTeXe, the new standard version of the \LaTeX{} Document -Preparation System. - -This document describes how to take advantage of the new features of -\LaTeX, and how to process your old \LaTeX{} documents with -\LaTeXe. However, this document is only a brief introduction to the -new facilities and is intended for authors who are already familiar -with the old version of \LaTeX{}. It is \emph{not} a reference manual -for \LaTeXe{} nor is it a complete introduction to \LaTeX. - -It is somewhat of an historical document now, since \LaTeXe{} came into -existence in 1994. - -\subsection[\LaTeXe---The new \LaTeX~release] - {\LaTeXe---The new \LaTeX~release\\ (well, for more than 10 years now)} - -The previous version of \LaTeX{} was known as \LaTeX~2.09. Over the -years many extensions have been developed for \LaTeX. This is, of -course, a sure sign of its continuing popularity but it has had one -unfortunate result: incompatible \LaTeX{} formats came into use at -different sites. This included `standard \LaTeX~2.09', \LaTeX{} built -with the \emph{New Font Selection Scheme}~(\NFSS), \SLiTeX, \AmSLaTeX, -and so on. Thus, to process documents from various places, a site -maintainer was forced to keep multiple versions of the \LaTeX{} -program. In addition, when looking at a source file it was not always -clear for which format the document was written. - -To put an end to this unsatisfactory situation, \LaTeXe{} has been -produced; it brings all such extensions back under a single format and -thus prevents the proliferation of mutually incompatible dialects of -\LaTeX~2.09. With \LaTeXe{} the `new font selection scheme' is -standard and, for example, \textsf{amsmath} (formerly the \AmSLaTeX{} -format) or \textsf{slides} (formerly the \SLiTeX{} format) are simply -extensions, which may be loaded by documents using the same base format. - -The introduction of a new release also made it possible to add a small -number of often-requested features and to make the task of writing -packages and classes simpler. - -\subsection{\LaTeX3---The long-term future of \LaTeX} -\label{Sec:ltx3} - -\LaTeXe{} is the consolidation step in a comprehensive -reimplementation of the \LaTeX{} system. The next major release of -\LaTeX{} will be \LaTeX3, which will include a radical overhaul of the -document designers' and package writers' interface to \LaTeX. - -\LaTeX3 is a long-term research project but, until it is completed, -the project team are committed to the active maintenance of \LaTeXe{}. -Thus the experience gained from the production and maintenance of -\LaTeXe{} will be a major influence on the design of \LaTeX3. -A brief description of the project can be found in the document -|ltx3info.tex|. - -If you would like to support the project then you are welcome to send -donations to the \LaTeX\ Project Fund; this has been set up to help -the research team by financing various expenses associated with this -voluntary work of maintaining the current \LaTeX{} and developing -\LaTeX\ further. - -The fund is administered by The \TeX{} Users Group and by various -local user groups. Information about making donations and joining -these groups is available from: -\begin{quote}\small\label{addrs} - \texttt{http://www.tug.org/lugs.html} -\end{quote} +\LaTeXe{} was released in 1994 and added a number of then-new concepts to +\LaTeX{}. These are described in \texttt{usrguide-historic}, which has largely remained +unchanged. Since then, the \LaTeX{} team have worked on a number of ideas, +firstly a programming language for \LaTeX{} (\pkg{expl3}) and then a range of +tools for document authors which build on that language. Here, we describe +\emph{stable} and \emph{widely-usable} concepts that have resulted from that +work. These `new' ideas have been transferred from development packages +into the \LaTeXe{} kernel. As such, they are now available to \emph{all} +\LaTeX{} users and have the \emph{same stability} as any other part of the +kernel. The fact that `behind the scenes' they are built on \pkg{expl3} +is useful for the development team, but is not directly important to users. -The \LaTeX3{} project has its home page -on the World Wide Web at: -\begin{verbatim} - http://www.latex-project.org/ -\end{verbatim} -This page describes \LaTeX{} and the \LaTeX3 project, and contains -pointers to other \LaTeX{} resources, such as the user guides, the -\TeX{} Frequently Asked Questions, and the \LaTeX{} bugs database. - -Older articles covering aspects of the \LaTeX3 project are also -available for anonymous ftp from the Comprehensive \TeX{} Archive, in -the directory: -\begin{verbatim} - ctan:info/ltx3pub -\end{verbatim} -The file |ltx3pub.bib| in that directory contains an abstract of each -of the files. +\section{Creating document commands and environments} \subsection{Overview} -This document contains an overview of the new structure and features -of \LaTeX. It is \emph{not} a self-contained document, as it contains -only the features of \LaTeX{} which have changed since version 2.09. -You should read this document in conjunction with an introduction to -\LaTeX{}. - -\begin{description} - -\item[Section~\ref{Sec:class+packages}] - contains an overview of the new structure of - \LaTeX{} documents. It describes how classes and packages work and - how class and package options can be used. It lists the standard - packages and classes which come with \LaTeX. - -\item[Section~\ref{Sec:commands}] describes the new commands available - to authors in \LaTeXe. - -\item[Section~\ref{Sec:209}] shows how to process old \LaTeX{} - documents with \LaTeXe. - -\item[Section~\ref{Sec:problems}] contains advice on dealing with - problems you may encounter in running \LaTeXe. - It lists some error messages which are new in \LaTeXe{} and - it describes some of the more common problems and how to cure them, - or where to find further information. - -\end{description} - -\subsection{Further information} - -For a general introduction to \LaTeX, including the new features of -\LaTeXe, you should read \emph{\LaTeXbook} -by Leslie Lamport~\cite{A-W:LLa94}. - -A more detailed description of the new features of \LaTeX, including an -overview of more than 200 packages and nearly 1000 ready to run examples, is -to be found in \emph{\LaTeXcomp second edition} by Frank Mittelbach and -Michel Goossens~\cite{A-W:MG2004}. - -Packages and programs for producing and manipulating graphics are -discussed at length in \emph{\LaTeXGcomp} by Michel Goossens, -Sebastian Rahtz and Frank Mittelbach~\cite{A-W:GRM97}. - -Solutions for publishing with \LaTeX{} on the World Wide Web are given -in \emph{\LaTeXWcomp} by Michel Goossens and Sebastian -Rahtz~\cite{A-W:GR99}. - -For more information about the many new \LaTeX{} packages you should -read the package documentation, which should be available from the -same source as your copy of \LaTeX. +Creating document commands and environments using the \LaTeX3 toolset is based +around the idea that a common set of descriptions can be used to cover almost +all argument types used in real documents. Thus parsing is reduced to a simple +description of which arguments a command takes: this description provides the +`glue' between the document syntax and the implementation of the +command. + +First, we will describe the argument types, then move on to explain how these +can be used to create both document commands and environments. Various more +specialized features are then described, which allow an even richer application +of a simple interface set up. + +The details here are intended to help users create document commands in +general. More technical detail, suitable for \TeX{} programmers, is included +in \texttt{interface3}. + +\subsection{Describing argument types} + +In order to allow each argument to be defined independently, the parser does +not simply need to know the number of arguments for a function, but also the +nature of each one. This is done by constructing an \emph{argument +specification}, which defines the number of arguments, the type of each +argument and any additional information needed for the parser to read the user +input and properly pass it through to internal functions. + +The basic form of the argument specifier is a list of letters, where each +letter defines a type of argument. As will be described below, some of the +types need additional information, such as default values. The argument types +can be divided into two, those which define arguments that are mandatory +(potentially raising an error if not found) and those which define optional +arguments. The mandatory types +\begin{itemize} + \item[\texttt{m}] A standard mandatory argument, which can either be a single token + alone or multiple tokens surrounded by curly braces |{}|. Regardless of the + input, the argument will be passed to the internal code without the outer + braces. This is the type specifier for a normal \TeX{} argument. + \item[\texttt{r}] Given as \texttt{r}\meta{token1}\meta{token2}, this denotes a + `required' delimited argument, where the delimiters are + \meta{token1} and \meta{token2}. If the opening delimiter \meta{token1} is + missing, the default marker |-NoValue-| will be inserted after a suitable + error. + \item[\texttt{R}] Given as \texttt{R}\meta{token1}\meta{token2}\marg{default}, + this is a `required' delimited argument as for~\texttt{r}, + but it has a user-definable recovery \meta{default} instead of + |-NoValue-|. + \item[\texttt{v}] Reads an argument `verbatim', between the following + character and its next occurrence, in a way similar to the argument + of the \LaTeXe{} command \cs{verb}. Thus a \texttt{v}-type argument + is read between two identical characters, which cannot be any of |%|, |\|, + |#|, |{|, |}| or \verb*| |. The verbatim argument can also be enclosed + between braces, |{| and |}|. A command with a verbatim argument will + produce an error when it appears within an argument of another function. + \item[\texttt{b}] Only suitable in the argument specification of an + environment, it denotes the body of the environment, between + |\begin|\marg{environment} and |\end|\marg{environment}. See + Section~\ref{sec:cmd:body} for details. +\end{itemize} +The types which define optional arguments are: +\begin{itemize} + \item[\texttt{o}] A standard \LaTeX{} optional argument, surrounded with square + brackets, which will supply the special |-NoValue-| marker if not given + (as described later). + \item[\texttt{d}] Given as \texttt{d}\meta{token1}\meta{token2}, an optional + argument which is delimited by \meta{token1} and \meta{token2}. As with + \texttt{o}, if no value is given the special marker |-NoValue-| is + returned. + \item[\texttt{O}] Given as \texttt{O}\marg{default}, is like \texttt{o}, but returns + \meta{default} if no value is given. + \item[\texttt{D}] Given as \texttt{D}\meta{token1}\meta{token2}\marg{default}, it is + as for \texttt{d}, but returns \meta{default} if no value is given. + Internally, the \texttt{o}, \texttt{d} and \texttt{O} types are + short-cuts to an appropriated-constructed \texttt{D} type argument. + \item[\texttt{s}] An optional star, which will result in a value + \cs{BooleanTrue} if a star is present and \cs{BooleanFalse} + otherwise (as described later). + \item[\texttt{t}] An optional \meta{token}, which will result in a value + \cs{BooleanTrue} if \meta{token} is present and \cs{BooleanFalse} + otherwise. Given as \texttt{t}\meta{token}. + \item[\texttt{e}] Given as \texttt{e}\marg{tokens}, a set of optional + \emph{embellishments}, each of which requires a \emph{value}. + If an embellishment is not present, |-NoValue-| is returned. Each + embellishment gives one argument, ordered as for the list of + \meta{tokens} in the argument specification. All \meta{tokens} + must be distinct. + \item[\texttt{E}] As for \texttt{e} but returns one or more \meta{defaults} + if values are not given: \texttt{E}\marg{tokens}\marg{defaults}. See + Section~\ref{sec:cmd:embellishment} for more details. +\end{itemize} -There are a number of documentation files which accompany every copy -of \LaTeX. A copy of \emph{\LaTeX{} News} will come out with each -six-monthly release of \LaTeX; it will be found in the files -|ltnews*.tex|. The class- and package-writer's guide \emph{\clsguide} -describes the new \LaTeX{} features for writers of document classes -and packages; it is in |clsguide.tex|. The guide \emph{\fntguide} -describes the \LaTeX{} font selection scheme for class- and -package-writers; it is in |fntguide.tex|. Support for Cyrillic languages -in \LaTeX{} is described in \emph{\cyrguide}. +\subsection{Modifying argument descriptions} -The documented source code (from the files used to produce the kernel -format via |latex.ltx|) is now available as -\emph{The \LaTeXe\ Sources}. ] -This very large document also includes an index of -\LaTeX{} commands. It can be typeset from the \LaTeX{} file -|source2e.tex| in the |base| directory, using the source files and -the class file |ltxdoc.cls| from this directory. +In addition to the argument \emph{types} discussed above, the argument +description also gives special meaning to three other characters. -For more information about \TeX{} and \LaTeX{}, please contact your -local \TeX{} Users Group, or the international \TeX{} Users Group (see -page \pageref{addrs}). +First, \texttt{+} is used to make an argument long (to accept paragraph +tokens). In contrast to \cs{newcommand}, this applies on an +argument-by-argument basis. So modifying the example to `|s o o +m O{default}|' +means that the mandatory argument is now \cs{long}, whereas the optional +arguments are not. +Secondly, \texttt{!} is used to control whether spaces are allowed before +optional arguments. There are some subtleties to this, as \TeX{} itself +has some restrictions on where spaces can be `detected': more detail +is given in Section~\ref{sec:cmd:opt-space}. -\section{Classes and packages} -\label{Sec:class+packages} +Thirdly, \texttt{=} is used to declare that the following argument should +be interpreted as a series of keyvals. See Section~\ref{sec:cmd:keyval} +for more details. -This section describes the new structure of \LaTeX{} documents and the -new types of file: \emph{classes} and \emph{packages}. +Finally, the character \texttt{>} is used to declare so-called +`argument processors', which can be used to modify the contents of an +argument before it is passed to the macro definition. The use of argument +processors is a somewhat advanced topic, (or at least a less commonly used +feature) and is covered in Section~\ref{sec:cmd:processors}. -\subsection{What are classes and packages?} +\subsection{Creating document commands and environments} -The main difference between \LaTeX~2.09 and \LaTeXe{} is in the -commands before |\begin{document}|. +\begin{decl} + |\NewDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ + |\RenewDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ + |\ProvideDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ + |\DeclareDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} +\end{decl} +This family of commands are used to create a \meta{cmd}. The argument +specification for the function is given by \meta{arg spec}, and the command +uses the \meta{code} with |#1|, |#2|, etc.\ replaced by the arguments found +by the parser. -In \LaTeX~2.09, documents had \emph{styles}, -such as \textsf{article} or \textsf{book}, and \emph{options}, -such as \textsf{twoside} or \textsf{epsfig}. -These were indicated by the |\documentstyle| command: -\begin{quote} - |\documentstyle|\oarg{options}\arg{style} -\end{quote} -For example, to specify a two-sided article with encapsulated -PostScript figures, you said: +An example: \begin{verbatim} - \documentstyle[twoside,epsfig]{article} +\NewDocumentCommand\chapter{s o m} + {% + \IfBooleanTF{#1}% + {\typesetstarchapter{#3}}% + {\typesetnormalchapter{#2}{#3}}% + } \end{verbatim} -However, there were two different types of document style option: -\emph{built-in options} such as |twoside|; and \emph{packages} such as -|epsfig.sty|. These were very different, since any \LaTeX{} document -style could use the \textsf{epsfig} package but only document styles -which declared the \textsf{twoside} option could use that option. - -To avoid this confusion, \LaTeXe{} differentiates between built-in -options and packages. These are given by the new |\documentclass| and -|\usepackage| commands: -\begin{quote} - |\documentclass|\oarg{options}\arg{class} \\ - |\usepackage|\oarg{options}\arg{packages} -\end{quote} -For example, to specify a two-sided article with encapsulated -PostScript figures, you now write: +would be a way to define a \cs{chapter} command which would essentially behave +like the current \LaTeXe{} command (except that it would accept an optional +argument even when a \texttt{*} was parsed). The \cs{typesetnormalchapter} +could test its first argument for being |-NoValue-| to see if an optional +argument was present. (See Section~\ref{sec:cmd:special} for details of +\cs{IfBooleanTF} and testing for |-NoValue-|.) + +The difference between the \cs{New...} \cs{Renew...}, \cs{Provide...} +and \cs{Declare...} versions is the behavior if \meta{cmd} is already +defined. +\begin{itemize} + \item \cs{NewDocumentCommand} will issue an error if \meta{cmd} + has already been defined. + \item \cs{RenewDocumentCommand} will issue an error if \meta{cmd} + has not previously been defined. + \item \cs{ProvideDocumentCommand} creates a new definition for + \meta{function} only if one has not already been given. + \item \cs{DeclareDocumentCommand} will always create the new + definition, irrespective of any existing \meta{cmd} with the + same name. This should be used sparingly. +\end{itemize} + +If the \meta{cmd} can't be provided as a single token but needs +\enquote{constructing}, you can use \cs{ExpandArgs} as explained in +Section~\ref{sec:preconstructing-csnames} which also gives an example +in which this is needed. + +\begin{decl} + |\NewDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\ + |\RenewDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\ + |\ProvideDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\ + |\DeclareDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} +\end{decl} +These commands work in the same way as \cs{NewDocumentCommand}, etc.\@, but +create environments (\cs{begin}\arg{env} \ldots{} +\cs{end}\arg{env}). Both the \meta{beg-code} and \meta{end-code} +may access the arguments as defined by \meta{arg spec}. The arguments will be +given following \cs{begin}\arg{env}. + +\subsection{Optional arguments} +\label{sec:cmd:opt} + +In contrast to commands created using \LaTeXe{}'s \cs{newcommand}, optional +arguments created using \cs{NewDocumentCommand} may safely be nested. Thus for +example, following \begin{verbatim} - \documentclass[twoside]{article} - \usepackage{epsfig} +\NewDocumentCommand\foo{om}{I grabbed `#1' and `#2'} +\NewDocumentCommand\baz{o}{#1-#1} \end{verbatim} -You can load more than one package with a single |\usepackage| -command; for example, rather than writing: +using the command as \begin{verbatim} - \usepackage{epsfig} - \usepackage{multicol} +\foo[\baz[stuff]]{more stuff} \end{verbatim} -you can specify: +will print +\begin{quote} +I grabbed `stuff-stuff' and `more stuff' +\end{quote} +This is particularly useful when placing a command with an optional argument +\emph{inside} the optional argument of a second command. + +When an optional argument is followed by a mandatory argument with the same +delimiter, the parser issues a warning because the optional argument could not +be omitted by the user, thus becoming in effect mandatory. This can apply to +\texttt{o}, \texttt{d}, \texttt{O}, \texttt{D}, \texttt{s}, \texttt{t}, +\texttt{e}, and \texttt{E} type arguments followed by \texttt{r} or +\texttt{R}-type required arguments. + +The default for \texttt{O}, \texttt{D} and \texttt{E} arguments can be +the result of grabbing another argument. Thus for example \begin{verbatim} - \usepackage{epsfig,multicol} +\NewDocumentCommand\foo{O{#2} m} \end{verbatim} -Note that \LaTeXe{} still understands the \LaTeX~2.09 |\documentstyle| -command. This command causes \LaTeXe{} to enter \emph{\LaTeX~2.09 -compatibility mode}, which is described in Section~\ref{Sec:209}. +would use the mandatory argument as the default for the leading optional +one. -You should not, however, use the |\documentstyle| command for new -documents because this compatibility mode is very slow and the new -features of \LaTeXe{} are not available in this mode. - -To help differentiate between classes and packages, document classes -now end with |.cls| rather than |.sty|. Packages still end with -|.sty|, since most \LaTeX~2.09 packages work well with \LaTeXe. - -\subsection{Class and package options} - -In \LaTeX~2.09, only document styles could have options such as -|twoside| or |draft|. In \LaTeXe{}, both classes and packages are -allowed to have options. For example, to specify a two-sided article -with graphics using the |dvips| driver, you write: +\subsection{Spacing and optional arguments} +\label{sec:cmd:opt-space} +\TeX{} will find the first argument after a function name irrespective of any +intervening spaces. This is true for both mandatory and optional arguments. So +|\foo[arg]| and \verb*|\foo [arg]| are equivalent. Spaces are also ignored when +collecting arguments up to the last mandatory argument to be collected (as it +must exist). So after \begin{verbatim} - \documentclass[twoside]{article} - \usepackage[dvips]{graphics} +\NewDocumentCommand\foo{m o m}{ ... } \end{verbatim} -It is possible for packages to share common options. For example, -you could, in addition, load the \textsf{color} package by specifying: +the user input |\foo{arg1}[arg2]{arg3}| and \verb*|\foo{arg1} [arg2] {arg3}| +will both be parsed in the same way. + +The behavior of optional arguments \emph{after} any mandatory arguments is +selectable. The standard settings will allow spaces here, and thus with \begin{verbatim} - \documentclass[twoside]{article} - \usepackage[dvips]{graphics} - \usepackage[dvips]{color} +\NewDocumentCommand\foobar{m o}{ ... } \end{verbatim} -But because |\usepackage| allows more than one package to be listed, -this can be shortened to: +both |\foobar{arg1}[arg2]| and \verb*|\foobar{arg1} [arg2]| will find an +optional argument. This can be changed by giving the modified |!| in the +argument specification: \begin{verbatim} - \documentclass[twoside]{article} - \usepackage[dvips]{graphics,color} +\NewDocumentCommand\foobar{m !o}{ ... } \end{verbatim} -In addition, packages will also use each option given to -the |\documentclass| command (if they know what to do with it), so you -could also write: +where \verb*|\foobar{arg1} [arg2]| will not find an optional argument. + +There is one subtlety here due to the difference in handling by \TeX{} of +`control symbols', where the command name is made up of a single +character, such as `\texttt{\textbackslash\textbackslash}'. +Spaces are not ignored by \TeX{} here, +and thus it is possible to require an optional argument directly follow such a +command. The most common example is the use of \texttt{\textbackslash\textbackslash} +in \pkg{amsmath} environments, which in the terms here would be defined as \begin{verbatim} - \documentclass[twoside,dvips]{article} - \usepackage{graphics,color} +\NewDocumentCommand\\{!s !o}{ ... } \end{verbatim} -Class and package options are covered in more detail in -\emph{\LaTeXcomp} and in \emph{\clsguide}. - -\subsection{Standard classes} - -The following classes are distributed with \LaTeX: -\begin{description} - -\item[article] The |article| class described in \emph{\LaTeXbook}. -\item[book] The |book| class described in \emph{\LaTeXbook}. -\item[report] The |report| class described in \emph{\LaTeXbook}. -\item[letter] The |letter| class described in \emph{\LaTeXbook}. -\item[slides] The |slides| class described in \emph{\LaTeXbook}, - formerly \SLiTeX. -\item[proc] A document class for proceedings, based on |article|. - Formerly the |proc| package. -\item[ltxdoc] The document class for documenting the \LaTeX{} - program, based on |article|. -\item[ltxguide] The document class for \emph{\usrguide} and - \emph{\clsguide}, based on |article|. The document you are reading - now uses the |ltxguide| class. The layout for this class is likely - to change in future releases of \LaTeX. -\item[ltnews] The document class for the \emph{\LaTeX{} News} - information sheet, based on |article|. The layout for this class - is likely to change in future releases of \LaTeX. -\item[minimal] -\NEWfeature{1995/12/01} - This class is the bare minimum (3 lines) that is needed in a - \LaTeX\ class file. It just sets the text width and height, and - defines |\normalsize|. It is principally intended for debugging - and testing \LaTeX\ code in situations where you do not need to - load a `full' class such as |article|. If, however, you are - designing a completely new class that is aimed for documents with - structure radically different from the structure supplied by the - article class, then it may make sense to use this as a base and add - to it code implementing the required structure, rather than - starting from |article| and modifying the code there. -\end{description} - -\subsection{Standard packages} -\label{Sec:st-pack} - -The following packages are distributed with \LaTeX: -\begin{description} -\item[alltt] -\NEWfeature{1994/12/01} - This package provides the |alltt| environment, which is like - the |verbatim| environment except that |\|, |{|, and |}| - have their usual meanings. It is described in |alltt.dtx| and - \emph{\LaTeXbook}. -\item[doc] This is the basic package for typesetting the documentation - of \LaTeX{} programs. It is described in |doc.dtx| and in - \emph{\LaTeXcomp}. -\item[exscale] This provides scaled versions of the math extension - font. It is described in |exscale.dtx| and \emph{\LaTeXcomp}. - \item[fontenc] This is used to specify which font encoding \LaTeX{} - should use. It is described in |ltoutenc.dtx|. -\item[graphpap] -\NEWfeature{1994/12/01} - This package defines the |\graphpaper| command; this - can be used in a |picture| environment. -\item[ifthen] Provides commands of the form `if\dots then do\dots - otherwise do\dots'. - It is described in |ifthen.dtx| and \emph{\LaTeXcomp}. -\item[inputenc] -\NEWfeature{1994/12/01} - This is used to specify which input encoding \LaTeX{} should use. - It is described in |inputenc.dtx|. -\item[latexsym] \LaTeXe{} no longer loads the \LaTeX{} symbol font by - default. To access it, you should use the |latexsym| package. It - is described in |latexsym.dtx| and in \emph{\LaTeXcomp}; see also - Section~\ref{Sec:problems}. - \item[makeidx] This provides commands for producing indexes. It is - described in \emph{\LaTeXbook} and in \emph{\LaTeXcomp}. - \item[newlfont] This is used to emulate the font commands of - \LaTeX~2.09 with the New Font Selection Scheme. It is described in - \emph{\LaTeXcomp}. - \item[oldlfont] This is used to emulate the font commands of - \LaTeX~2.09. It is described in \emph{\LaTeXcomp}. - \item[showidx] - This causes the argument of each |\index| command to - be printed on the page where it occurs. - It is described in \emph{\LaTeXbook}. - \item[syntonly] This is used to process a document without - typesetting it. It is described in |syntonly.dtx| and in - \emph{\LaTeXcomp}. - \item[tracefnt] This allows you to control how much information about - \LaTeX's font loading is displayed. It is described in - \emph{\LaTeXcomp}. -\end{description} - -\subsection{Related software} - -\NEWdescription{1998/12/01} -The following software should be available from the same distributor -as your copy of \LaTeXe. You should obtain at least the -\textsf{graphics} and \textsf{tools} collections in order to have all -the files described in \emph{\LaTeXbook}. The |amsmath| package (part -of \textsf{amslatex} and formerly known as |amstex|) -and \textsf{babel} are also mentioned in the list -of `standard packages' in section C.5.2 of that book. -\begin{description} -\item[amslatex] Advanced mathematical typesetting from the American - Mathematical Society. This includes the |amsmath| package; it - provides many commands for typesetting mathematical formulas of - higher complexity. It is produced and supported by the American - Mathematical Society and it is described in \emph{\LaTeXcomp}. -\item[babel] This package and related files support typesetting in - many languages. It is described in \emph{\LaTeXcomp}. -\item[cyrillic] -\NEWfeature{1998/12/01} - Everything you need (except the fonts themselves) for - typesetting with Cyrillic fonts. -\item[graphics] This includes the |graphics| package which - provides support for the inclusion and transformation of graphics, - including files produced by other software. Also included, is the - |color| package which provides support for typesetting in colour. - Both these packages are described in \emph{\LaTeXbook}. -\item[psnfss] Everything you need (except the fonts themselves) for - typesetting with a large range of Type~1 (PostScript) fonts. -\item[tools] Miscellaneous packages written by the \LaTeX3 - project team. -\end{description} -These packages come with documentation and each of them is also -described in at least one of the books \emph{\LaTeXcomp} and -\emph{\LaTeXbook}. - -\subsubsection{Tools} - -This collection of packages includes, at least, the following (some -files may have slightly different names on certain systems): - -\begin{description} -\item[array] - Extended versions of the environments |array|, |tabular| - and |tabular*|, with many extra features. -\item[calc] -\NEWfeature{1996/12/01} - Enables the use of certain algebraic notation when specifying - values for lengths and counters. -\item[dcolumn] - Alignment on `decimal points' in tabular entries. Requires the - |array| package. -\item[delarray] - Adds `large delimiters' around arrays. Requires |array|. -\item[hhline] - Finer control over horizontal rules in tables. Requires |array|. -\item[longtable] - Multi-page tables. (Does not require |array|, but it uses the - extended features if both are loaded.) -\item[tabularx] - Defines a |tabularx| environment that is similar to |tabular*| - but it modifies the column widths, rather than the inter-column - space, to achieve the desired table width. -\item[afterpage] - Place text after the current page. -\item[bm] - Access bold math symbols. -\item[enumerate] - Extended version of the |enumerate| environment. -\item[fontsmpl] - Package and test file for producing `font samples'. -\item[ftnright] - Place all footnotes in the right-hand column in two-column mode. -\item[indentfirst] - Indent the first paragraph of sections, etc. -\item[layout] - Show the page layout defined by the current document class. -\item[multicol] - Typeset text in columns, with the length of the columns - `balanced'. -\item[rawfonts] - Preload fonts using the old internal font names of \LaTeX~2.09. - See Section~\ref{Sec:oldinternals}. -\item[somedefs] - Selective handling of package options. (Used by the rawfonts - package.) -\item[showkeys] - Prints the `keys' used by |\label|, |\ref|, |\cite| etc.; useful - whilst drafting. -\item[theorem] - Flexible declaration of `theorem-like' environments. -\item[varioref] - `Smart' handling of page references. -\item[verbatim] - Flexible extension of the verbatim environment. -\item[xr] - Cross reference other `external' documents. -\item[xspace] - `Smart space' command that helps you to avoid the common mistake - of missing spaces after command names. -\end{description} - - -\section{Commands} -\label{Sec:commands} - -This section describes the new commands available in \LaTeXe. -They are covered in more detail in \emph{\LaTeXbook} and in -\emph{\LaTeXcomp}. - -\subsection{Preamble commands} -\label{Sec:pre} - -The changes to the preamble commands are intentionally designed to make -\LaTeXe{} documents look clearly different from old documents. The -commands should be used only before |\begin{document}|. -\begin{decl} -|\documentclass| \oarg{option-list} \arg{class-name} - \oarg{release-date} -\end{decl} - -This command replaces the -\LaTeX~2.09 command |\documentstyle|. - -There must be exactly one |\documentclass| command in a document; and -it should normally come before any other command. (There are some -exceptions, e.g., you can have |filecontents| environments before it -or |\RequirePackage| but these should be only used in special -scenarios as discussed elsewhere.) +\subsection{`Embellishments'} +\label{sec:cmd:embellishment} -The \m{option-list} is a list of options, each of which may modify the -formatting of elements which are defined in the \m{class-name} file, -as well as those in all following |\usepackage| commands (see -below). - -The optional argument \m{release-date} can be used to specify the -earliest desired release date of the class file; it should contain a -date in the format \textsc{yyyy/mm/dd}. If a version of the class -older than this date is found, a warning is issued. - -For example, to specify a two-column article, using a version of -|article.cls| released after June 1994, you specify: +The \texttt{E}-type argument allows one default value per test token. This is +achieved by giving a list of defaults for each entry in the list, for example: \begin{verbatim} - \documentclass[twocolumn]{article}[1994/06/01] +E{^_}{{UP}{DOWN}} \end{verbatim} +If the list of default values is \emph{shorter} than the list of test tokens, +the special |-NoValue-| marker will be returned (as for the \texttt{e}-type +argument). Thus for example +\begin{verbatim} +E{^_}{{UP}} +\end{verbatim} +has default \texttt{UP} for the |^| test character, but will return the +|-NoValue-| marker as a default for |_|. This allows mixing of explicit +defaults with testing for missing values. -\begin{decl} -|\documentstyle| \oarg{option-list} \arg{class-name} -\end{decl} - -This command is still supported for compatibility with old files. It -is essentially the same as |\documentclass| except that it invokes -\emph{\LaTeX~2.09 compatibility mode}. It also causes any options in -the \m{option-list} that are not processed by the class file to be -loaded as packages after the class has been loaded. See -Section~\ref{Sec:209} for more details on \LaTeX~2.09 compatibility -mode. - -\begin{decl} -|\usepackage| \oarg{option-list} \arg{package-name} \oarg{release-date} -\end{decl} -Any number of |\usepackage| commands is allowed. Each package file -(as denoted by \m{package-name}) defines new elements (or modifies -those defined in the class file loaded by the \m{class-name} argument -of the |\documentclass| command). A package file thus extends the -range of documents which can be processed. +\subsection{Testing special values} +\label{sec:cmd:special} -The \m{option-list} argument can contain a list of options, each of -which can modify the formatting of elements which are defined in this -\m{package-name} file. +Optional arguments make use of dedicated variables to return information about +the nature of the argument received. -As above, \m{release-date} can contain the earliest desired release -date of the package file in the format \textsc{yyyy/mm/dd}; if an -older version of the package is found, a warning is issued. -For example, to load the |graphics| package for the |dvips| driver, -using a version of |graphics.sty| released after June 1994, you write: -\begin{verbatim} - \usepackage[dvips]{graphics}[1994/06/01] -\end{verbatim} -Each package is loaded only once. If the same package is requested -more than once, nothing happens in the second or following attempt -unless the package has been requested with options that were not given -in the original |\usepackage|. If such extra options are specified -then an error message is produced. See Section~\ref{Sec:problems} how -to resolve this problem. - -As well as processing the options given in the \m{option-list} of the -|\usepackage| command, each package processes the -\m{option-list} of the |\documentclass| command as well. This -means that any option which should be processed by every package (to -be precise, by every package that specifies an action for it) can be -specified just once, in the |\documentclass| command, rather than -being repeated for each package that needs it. \begin{decl} -|\listfiles| + |\IfNoValueTF| \arg{arg} \arg{true code} \arg{false code} \\ + |\IfNoValueT| \arg{arg} \arg{true code} \\ + |\IfNoValueF| \arg{arg} \arg{false code} \end{decl} +The \cs{IfNoValue(TF)} tests are used to check if \meta{argument} (|#1|, +|#2|, \emph{etc.}) is the special |-NoValue-| marker. For example +\begin{verbatim} +\NewDocumentCommand\foo{o m} + {% + \IfNoValueTF {#1}% + {\DoSomethingJustWithMandatoryArgument{#2}}% + {\DoSomethingWithBothArguments{#1}{#2}}% + } +\end{verbatim} +will use a different internal function if the optional argument +is given than if it is not present. -If this command is placed in the preamble then a list of the files -read in (as a result of processing the document) will be displayed -on the terminal (and in the log file) at the end of the run. Where -possible, a short description will also be produced. +Note that three tests are available, depending on which outcome +branches are required: \cs{IfNoValueTF}, \cs{IfNoValueT} and +\cs{IfNoValueF}. -\NEWdescription{1995/12/01} -\emph{Warning}: this command will list only files which were read -using \LaTeX{} commands such as |\input|\arg{file} or -|\include|\arg{file}. If the file was read using the primitive \TeX{} -syntax |\input |\emph{file} (without |{ }| braces around the file name) -then it will not be listed; failure to use the \LaTeX{} form with the -braces can cause more severe problems, possibly leading to overwriting -important files, so \textbf{always put in the braces}. +As the \cs{IfNoValue(TF)} tests are expandable, it is possible to +test these values later, for example at the point of typesetting or +in an expansion context. +It is important to note that |-NoValue-| is constructed such that it +will \emph{not} match the simple text input |-NoValue-|, i.e.~that +\begin{verbatim} +\IfNoValueTF{-NoValue-} +\end{verbatim} +will be logically \texttt{false}. +When two optional arguments follow each other (a syntax we typically +discourage), it can make sense to allow users of the command to +specify only the second argument by providing an empty first +argument. +\NEWdescription{2022/06/01} +Rather than testing separately for emptiness and for +|-NoValue-| it is then best to use the argument type~|O| with an +empty default value, and then test for emptiness using the +conditional \cs{IfBlankTF} (described below) instead. \begin{decl} -|\setcounter{errorcontextlines}| \arg{num} + |\IfValueTF| \arg{arg} \arg{true code} \arg{false code} \\ + |\IfValueT| \arg{arg} \arg{true code} \\ + |\IfValueF| \arg{arg} \arg{false code} \end{decl} +The reverse form of the \cs{IfNoValue(TF)} tests are also available +as \cs{IfValue(TF)}. The context will determine which logical +form makes the most sense for a given code scenario. -\TeX~3 introduced a new primitive |\errorcontextlines| which controls -the format of error messages. \LaTeXe\ provides an interface to this -through the standard |\setcounter| command. As most \LaTeX\ users do -not want to see the internal definitions of \LaTeX\ commands each time -they make an error, \LaTeXe{} sets this to $-1$ by default. -\subsection{Environments to write out support files} -\NEWfeature{2019} -% -Until the \LaTeX\ release in 2019 the |filecontents| environment was -restricted to a place before the |\documentclass| command. These days -it can be used anywhere, though we still think that in most cases it is -best to only use it a the top of your document or in the preamble. -\begin{decl} -|\begin{filecontents}| \oarg{option-list} \arg{file-name} \\ - \m{file-contents} \\ -|\end{filecontents}| +\begin{decl}[2022/06/01] + |\IfBlankTF| \arg{arg} \arg{true code} \arg{false code} \\ + |\IfBlankT| \arg{arg} \arg{true code} \\ + |\IfBlankF| \arg{arg} \arg{false code} \end{decl} -The |filecontents| environment is intended for bundling within a -single document file the contents of packages, options, or other -files. When the document file is run through \LaTeXe{} the body of -this environment is written verbatim (preceded by a comment line) to a -file whose name is given as the environment's only argument. However, -if that file already exists then nothing happens except for an -information message. -These days most UTF-8 text characters can be used in a -|filecontents| envi\-ronment---they will be written unchanged to the -output file. However, tabs and form feeds produce a warning, -explaining that they are turned into spaces or blank lines, -respectively. - -By default the environment does not overwrite an existing file and it -even refuses to write out the data if there exists a file that is -anywhere in the path that \TeX\ searches when inputting files. With -the option |nosearch| you can ask it to look only into the current -directory and with the option |overwrite| (or |force|) you can request -it to write the file regardless. It will, however, never write to -|\jobname.tex| to avoid overwriting itself. +The \cs{IfNoValueTF} command chooses the \meta{true code} if the optional argument has not +been used at all (and it returns the special \texttt{-NoValue-} +marker), but not if it has been given an empty value. In contrast +\cs{IfBlankTF} returns true if its argument is either truly empty or +only contains one or more normal blanks. +For example +\begin{verbatim} +\NewDocumentCommand\foo{m!o}{\par #1: + \IfNoValueTF{#2} + {No optional}% + {% + \IfBlankTF{#2} + {Blanks in or empty}% + {Real content in}% + }% + \space argument!} +\foo{1}[bar] \foo{2}[ ] \foo{3}[] \foo{4}[\space] \foo{5} [x] +\end{verbatim} +results +in the following output: +\begin{quote} + \NewDocumentCommand\foo{m!o}{\par #1: + \IfNoValueTF{#2}{No optional}% + {\IfBlankTF{#2}{Blanks in or empty}% + {Real content in}}% + \space argument!} + \foo{1}[bar] \foo{2}[ ] \foo{3}[] \foo{4}[\space] \foo{5} [x] +\end{quote} -The |filecontents| environment is used for including \LaTeX{} files. -For other plain text files (such as Encapsulated PostScript files), -you should use the |filecontents*| environment which does not add a -comment line. +Note that the \cs{space} in (4) is considered real content---because it is +a command and not a \enquote{space} character---even though it results +in producing a space. You can also observe in (5) the effect of the +\texttt{!} specifier, preventing the last \cs{foo} +from interpreting \texttt{[x]} as its optional argument. -\subsection{Document structure} +\begin{decl} + |\BooleanFalse| \\ + |\BooleanTrue| +\end{decl} +The \texttt{true} and \texttt{false} flags set when searching for +an optional character (using \texttt{s} or \texttt{t\meta{char}}) have +names which are accessible outside of code blocks. -The |book| document class introduces new commands to indicate -document structure. \begin{decl} -|\frontmatter| \\ |\mainmatter| \\ |\backmatter| + |\IfBooleanTF| \arg{arg} \arg{true code} \arg{false code} \\ + |\IfBooleanT| \arg{arg} \arg{true code} \\ + |\IfBooleanF| \arg{arg} \arg{false code} \end{decl} -These commands indicate the beginning of the front matter (title page, -table of contents and prefaces), main matter (main text) and back -matter (bibliography, indexes and colophon). +Used to test if \meta{argument} (|#1|, |#2|, \emph{etc.}) is +\cs{BooleanTrue} or \cs{BooleanFalse}. For example +\begin{verbatim} +\NewDocumentCommand\foo{sm} + {% + \IfBooleanTF {#1}% + {\DoSomethingWithStar{#2}}% + {\DoSomethingWithoutStar{#2}}% + } +\end{verbatim} +checks for a star as the first argument, then chooses the action to +take based on this information. + +\subsection{Auto-converting to key--value format} +\label{sec:cmd:keyval} + +Some document commands have a long history of accepting a `free text' optional +argument, for example \cs{caption} and the sectioning commands \cs{section}, +etc. Introducing more sophisticated (keyval) options to these commands +therefore needs a method to interpret the optional argument \emph{either} as +free text \emph{or} as a series of keyvals. This needs to take place +during argument grabbing as there is a need for careful treatment of +braces to obtain the correct result. + +The \texttt{=} modifier is available to allow \pkg{ltcmd} to correctly +implement this process. The modifier guarantees that the argument will be +passed to further code as a series of keyvals. To do that, the \texttt{=} +should be followed by an argument containing the default key name. This is used +as the key in a key--value pair \emph{if} the `raw' argument does \emph{not} +have the correct form to be interpreted as a set of keyvals. + +Taking \cs{caption} as an example, with the demonstration implementation +\begin{verbatim} +\DeclareDocumentCommand + \caption + {s ={short-text} +O{#3} +m} + {% + \showtokens{Grabbed arguments:^^J(#2)^^Jand^^J(#3)}% + } +\end{verbatim} +the default key name is \texttt{short-text}. When the command \cs{caption} is +then used, if the optional argument is free text such as +\begin{verbatim} +\caption[Some short text]{A much longer and more detailed text for + demonstration purposes} +\end{verbatim} +then the output will be +\begin{verbatim} +Grabbed arguments: +(short-text={Some short text}) +and +(A much longer and more detailed text for demonstration purposes) +\end{verbatim} +On the other hand, if the caption is given with a keyval-form argument +\begin{verbatim} +\caption[label = cap:demo]% + {A much longer and more detailed text for demonstration purposes} +\end{verbatim} +then this will be respected +\begin{verbatim} +Grabbed arguments: +(label = cap:demo) +and +(A much longer and more detailed text for demonstration purposes) +\end{verbatim} -\subsection{Definitions} +Interpretation as keyval form is determined by the presence of \texttt{=} +characters within the argument. Those in inline math mode (enclosed within +\verb|$...$| or \verb|\(...\)|) are ignored. An argument can be forced to be +read as keyvals by including an empty entry at the start +\begin{verbatim} +\caption[=,This is now a keyval]% +% ... +\caption[This is not $=$ keyval]% +\end{verbatim} -In \LaTeX, commands can have both mandatory and optional arguments, -for example in: +This empty entry is \emph{not} passed to the underlying code, so will not lead +to issues with keyval parsers that do not allow an empty key name. Any text-mode +\texttt{=} signs will need to be braced to avoid being misinterpreted: this +is likely most conveniently handled by bracing the entire argument \begin{verbatim} - \documentclass[11pt]{article} +\caption[{Not = to a keyval!}]% +\end{verbatim} +which will be passed correctly as +\begin{verbatim} +Grabbed arguments: +(short-text = {Not = to a keyval!}) \end{verbatim} -the |11pt| argument is optional, whereas the |article| class name is -mandatory. -In \LaTeX~2.09 users could define commands with arguments, but these -had to be mandatory arguments. With \LaTeXe, users can now define -commands and environments which also have one optional argument. +\subsection{Argument processors} +\label{sec:cmd:processors} -\begin{decl} -|\newcommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\ -|\newcommand*| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\ -|\renewcommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\ -|\renewcommand*| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} -\end{decl} +Argument processor are applied to an argument \emph{after} it has been grabbed +by the underlying system but before it is passed to \meta{code}. An argument +processor can therefore be used to regularize input at an early stage, allowing +the internal functions to be completely independent of input form. Processors +are applied to user input and to default values for optional arguments, but +\emph{not} to the special |-NoValue-| marker. -These commands have a new, second, optional argument; this is used for -defining commands which themselves take one optional argument. This -new argument is best introduced by means of a simple (and hence not -very practical) example: +Each argument processor is specified by the syntax \texttt{>}\marg{processor} +in the argument specification. Processors are applied from right to left, so +that \begin{verbatim} - \newcommand{\example}[2][YYY]{Mandatory arg: #2; - Optional arg: #1.} +>{\ProcessorB} >{\ProcessorA} m \end{verbatim} -This defines |\example| to be a command with two arguments, referred -to as |#1| and |#2| in the \arg{definition}---nothing new so far. But -by adding a second optional argument to this |\newcommand| (the -|[YYY]|) the first argument (|#1|) of the newly defined command -|\example| is made optional with its default value being |YYY|. +would apply \cs{ProcessorA} followed by \cs{ProcessorB} to the tokens grabbed +by the \texttt{m} argument. -Thus the usage of |\example| is either: +\begin{decl} + |\SplitArgument| \arg{number} \arg{token(s)} +\end{decl} +This processor splits the argument given at each occurrence of the +\meta{tokens} up to a maximum of \meta{number} tokens (thus +dividing the input into $\text{\meta{number}} + 1$ parts). +An error is given if too many \meta{tokens} are present in the +input. The processed input is placed inside +$\text{\meta{number}} + 1$ sets of braces for further use. +If there are fewer than \arg{number} of \arg{tokens} in the argument +then |-NoValue-| markers are added at the end of the processed +argument. \begin{verbatim} - \example{BBB} +\NewDocumentCommand \foo {>{\SplitArgument{2}{;}} m} + {\InternalFunctionOfThreeArguments#1} \end{verbatim} -which prints: -\begin{quote} - Mandatory arg: BBB; - Optional arg: YYY. -\end{quote} -or: +If only a single character \meta{token} is used for the split, any +category code $13$ (active) character matching the \meta{token} will +be replaced before the split takes place. +Spaces are trimmed at each end of each item parsed. + +The \texttt{E} argument type is somewhat special, because with a single +\texttt{E} in the command declaration you may end up with several +arguments in a command (one formal argument per embellishment token). +Therefore, when an argument processor is applied to an \texttt{E}-type +argument, all the arguments pass through that processor before being fed +to the \meta{code}. For example, this command \begin{verbatim} - \example[XXX]{AAA} +\NewDocumentCommand \foo { >{\TrimSpaces} e{_^} } + { [#1](#2) } \end{verbatim} -which prints: -\begin{quote} - Mandatory arg: AAA; - Optional arg: XXX. -\end{quote} - -The default value of the optional argument is \texttt{YYY}. -This value is specified as the \oarg{default} argument of the -|\newcommand| that created |\example|. +applies \cs{TrimSpaces} to both arguments. -As another more useful example, the definition: +\begin{decl} + |\SplitList| \arg{token(s)} +\end{decl} +This processor splits the argument given at each occurrence of the +\meta{token(s)} where the number of items is not fixed. Each item is +then wrapped in braces within |#1|. The result is that the +processed argument can be further processed using a mapping function +(see below). \begin{verbatim} - \newcommand{\seq}[2][n]{\lbrace #2_{0},\ldots,\,#2_{#1} \rbrace} +\NewDocumentCommand \foo {>{\SplitList{;}} m} + {\MappingFunction#1} \end{verbatim} -means that the input |$\seq{a}$| produces -the formula $\lbrace a_{0},\ldots,\,a_{n} \rbrace$, -whereas the input |$\seq[k]{x}$| produces the formula -$\lbrace x_{0},\ldots,\,x_{k} \rbrace$. - -In summary, the command: -\begin{quote} - |\newcommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} -\end{quote} -defines \m{cmd} to be a command with \m{num} arguments, the first of -which is optional and has default value \m{default}. - -Note that there can only be one optional argument but, as before, -there can be up to nine arguments in total. +If only a single character \meta{token} is used for the split, any +category code $13$ (active) character matching the \meta{token} will +be replaced before the split takes place. +Spaces are trimmed at each end of each item parsed. \begin{decl} -|\newenvironment| - \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} \\ -|\newenvironment*| - \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} \\ -|\renewenvironment| - \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} \\ -|\renewenvironment*| - \arg{cmd} \oarg{num} \oarg{default} \arg{beg-def} \arg{end-def} + |\ProcessList| \arg{list} \arg{function} \end{decl} - -\LaTeXe\ also supports the creation of environments that have one -optional argument. Thus the syntax of these two commands has -been extended in the same way as that of |\newcommand|. +To support \cs{SplitList}, the function \cs{ProcessList} is available +to apply a \meta{function} to every entry in a \meta{list}. The +\meta{function} should absorb one argument: the list entry. For example +\begin{verbatim} +\NewDocumentCommand \foo {>{\SplitList{;}} m} + {\ProcessList{#1}{\SomeDocumentCommand}} +\end{verbatim} \begin{decl} -|\providecommand| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} \\ -|\providecommand*| \arg{cmd} \oarg{num} \oarg{default} \arg{definition} + |\ReverseBoolean| \end{decl} - -This takes the same arguments as |\newcommand|. If \m{cmd} is already -defined then the existing definition is kept; but if it is currently -undefined then the effect of |\providecommand| is to define \m{cmd} -just as if |\newcommand| had been used. - -\NEWfeature{1994/12/01} - All the above five `defining commands' now have \texttt{*}-forms that - are usually the better form to use when defining commands with - arguments, unless any of these arguments is intended to contain - whole paragraphs of text. Moreover, if you ever do find yourself - needing to use the non-star form then you should ask whether - that argument would not better be treated as the contents of a - suitably defined environment. - -\NEWfeature{1995/12/01} - The commands produced by the above five `defining commands' are - now robust. - -\subsection{Boxes} - -These next three commands for making LR-boxes all existed in -\LaTeX~2.09. They have been enhanced in two ways. +This processor reverses the logic of \cs{BooleanTrue} and +\cs{BooleanFalse}, so that the example from earlier would become +\begin{verbatim} +\NewDocumentCommand\foo{>{\ReverseBoolean} s m} + {% + \IfBooleanTF#1% + {\DoSomethingWithoutStar{#2}}% + {\DoSomethingWithStar{#2}}% + } +\end{verbatim} \begin{decl} -|\makebox| \oarg{width} \oarg{pos} \arg{text} \\ -|\framebox| \oarg{width} \oarg{pos} \arg{text} \\ -|\savebox| \arg{cmd} \oarg{width} \oarg{pos} \arg{text} + |\TrimSpaces| \end{decl} - -One small but far-reaching change for \LaTeXe\ is that, within the -\m{width} argument only, four special lengths can be used. These are -all dimensions of the box that would be produced by using simply -|\mbox|\arg{text}: -\begin{itemize} -\item [] |\height|\quad its height above the baseline; -\item [] |\depth|\quad its depth below the baseline; -\item [] |\totalheight|\quad the sum of |\height| and |\depth|; -\item [] |\width|\quad its width. -\end{itemize} -Thus, to put `hello' in the centre of a box of twice its natural -width, you would use: +Removes any leading and trailing spaces (tokens with character code~$32$ +and category code~$10$) for the ends of the argument. Thus for example +declaring a function \begin{verbatim} - \makebox[2\width]{hello} +\NewDocumentCommand\foo {>{\TrimSpaces} m} + {\showtokens{#1}} \end{verbatim} -Or you could put \textit{f} into a square box, like -this: - \framebox{\makebox[\totalheight]{\itshape f\/}} +and using it in a document as +\begin{flushleft} + \verb= =\verb*=\foo{ hello world }= +\end{flushleft} +will show `\verb*=hello world=' at the terminal, with the space at each +end removed. \cs{TrimSpaces} will remove multiple spaces from the ends of +the input in cases where these have been included such that the standard +\TeX{} conversion of multiple spaces to a single space does not apply. + +\subsection{Body of an environment} +\label{sec:cmd:body} + +While environments |\begin|\marg{environment}\ \dots{}\,|\end|\marg{environment} +are typically used in cases where the code implementing the \meta{environment} +does not need to access the contents of the environment (its `body'), +it is sometimes useful to have the body as a standard argument. + +This is achieved by ending the argument specification with~\texttt{b}, which is +a dedicated argument type for this situation. For instance \begin{verbatim} - \framebox{\makebox[\totalheight]{\itshape f\/}} +\NewDocumentEnvironment{twice} {O{\ttfamily} +b} + {#2#1#2} {} +\begin{twice}[\itshape] + Hello world! +\end{twice} \end{verbatim} -Note that it is the total width of the framed box, including the -frame, which is set to |\totalheight|. +typesets `Hello world!{\itshape Hello world!}'. -The other change is a new possibility for \m{pos}: |s| has been added -to |l| and |r|. If \m{pos} is |s| then the text is stretched the full -length of the box, making use of any `rubber lengths' (including any -inter-word spaces) in the contents of the box. If no such `rubber -length' is present, an `underfull box' will probably be produced. +The prefix |+| is used to allow multiple paragraphs in the environment's body. +Argument processors can also be applied to \texttt{b}~arguments. By default, +spaces are trimmed at both ends of the body: in the example there would +otherwise be spaces coming from the ends the lines after |[\itshape]| and +|world!|. Putting the prefix |!| before \texttt{b} suppresses space-trimming. -\begin{decl} -|\parbox| \oarg{pos} \oarg{height} \oarg{inner-pos} \arg{width} - \arg{text} \\ -|\begin{minipage}| - \oarg{pos} \oarg{height} \oarg{inner-pos} \arg{width}\\ -\m{text}\\ -|\end{minipage}| -\end{decl} +When \texttt{b} is used in the argument specification, the last +argument of the environment declaration (e.g., +\cs{NewDocumentEnvironment}), which consists of an \meta{end code} to +insert at |\end|\marg{environment}, is redundant since one can simply +put that code at the end of the \meta{start code}. Nevertheless this +(empty) \meta{end code} must be provided. -As for the box commands above, |\height|, |\width|, etc.~may be used -in the \oarg{height} argument to denote the natural dimensions of the -box. +Environments that use this feature can be nested. -The \m{inner-pos} argument is new in \LaTeXe. It is the vertical -equivalent to the \m{pos} argument for |\makebox|, etc, determining -the position of \m{text} within the box. The \m{inner-pos} may be any -one of |t|, |b|, |c|, or |s|, denoting top, bottom, centered, or -`stretched' alignment respectively. When the \m{inner-pos} argument -is not specified, \LaTeX\ gives it same value as \m{pos} (this could be -the latter's default value). +\subsection{Fully-expandable document commands} +Document commands created using \cs{NewDocumentCommand}, etc.\@, are normally +created so that they do not expand unexpectedly. This is done using engine +features, so is more powerful than \LaTeXe{}'s \cs{protect} mechanism. There +are \emph{very rare} occasion when it may be useful to create functions using a +expansion-only grabber. This imposes a number of restrictions on the +nature of the arguments accepted by a function, and the code it implements. +This facility should only be used when \emph{absolutely necessary}. \begin{decl} -|\begin{lrbox}| \arg{cmd}\\ -\m{text}\\ -|\end{lrbox}| + |\NewExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ + |\RenewExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ + |\ProvideExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ + |\DeclareExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \end{decl} +This family of commands is used to create a document-level \meta{function}, +which will grab its arguments in a fully-expandable manner. The +argument specification for the function is given by \meta{arg spec}, +and the function will execute \meta{code}. In general, \meta{code} will +also be fully expandable, although it is possible that this will +not be the case (for example, a function for use in a table might +expand so that \cs{omit} is the first non-expandable non-space token). + +Parsing arguments by pure expansion imposes a number of restrictions on +both the type of arguments that can be read and the error checking +available: +\begin{itemize} + \item The last argument (if any are present) must be one of the + mandatory types \texttt{m}, \texttt{r} or \texttt{R}. + \item The `verbatim' argument type \texttt{v} is not available. + \item Argument processors (using \texttt{>}) are not available. + \item It is not possible to differentiate between, for example + |\foo[| and |\foo{[}|: in both cases the \texttt{[} will be + interpreted as the start of an optional argument. As a + result, checking for optional arguments is less robust than + in the standard version. +\end{itemize} -This is an environment which does not directly print anything. -Its effect is to save the typeset \m{text} in the bin \m{cmd}. Thus -it is like |\sbox| \arg{cmd} \arg{text}, except that any white space -before or after the contents \m{text} is ignored. - -This is very useful as it enables both the |\verb| command and the -\texttt{verbatim} environment to be used within \m{text}. - -It also makes it possible to define, for example, a `framed box' -environment. This is done by first using this environment to save -some text in a bin \m{cmd} and then calling -|\fbox{\usebox{|\m{cmd}|}}|. - -The following example defines an environment, called |fmpage|, that is -a framed version of |minipage|. +\subsection{Details about argument delimiters} + +In normal (non-expandable) commands, the delimited types look for the +initial delimiter by peeking ahead (using \pkg{expl3}'s |\peek_...| +functions) looking for the delimiter token. The token has to have the +same meaning and `shape' of the token defined as delimiter. +There are three possible cases of delimiters: character tokens, control +sequence tokens, and active character tokens. For all practical purposes +of this description, active character tokens will behave exactly as +control sequence tokens. + +\subsubsection{Character tokens} + +A character token is characterized by its character code, and its meaning +is the category code~(|\catcode|). When a command is defined, the meaning +of the character token is fixed into the definition of the command and +cannot change. A command will correctly see an argument delimiter if +the open delimiter has the same character and category codes as at the +time of the definition. For example in: \begin{verbatim} - \newsavebox{\fmbox} - \newenvironment{fmpage}[1] - {\begin{lrbox}{\fmbox}\begin{minipage}{#1}} - {\end{minipage}\end{lrbox}\fbox{\usebox{\fmbox}}} +\NewDocumentCommand { \foobar } { D<>{default} } {(#1)} +\foobar \par +\char_set_catcode_letter:N < +\foobar \end{verbatim} +the output would be: +\begin{verbatim} +(hello) +(default) +\end{verbatim} +as the open-delimiter |<| changed in meaning between the two calls to +|\foobar|, so the second one doesn't see the |<| as a valid delimiter. +Commands assume that if a valid open-delimiter was found, a matching +close-delimiter will also be there. If it is not (either by being +omitted or by changing in meaning), a low-level \TeX{} error is raised +and the command call is aborted. + +\subsubsection{Control sequence tokens} + +A control sequence (or control character) token is characterized by is +its name, and its meaning is its definition. +A token cannot have two different meanings at the same time. +When a control sequence is defined as delimiter in a command, +it will be detected as delimiter whenever the control sequence name +is found in the document regardless of its current definition. +For example in: +\begin{verbatim} +\cs_set:Npn \x { abc } +\NewDocumentCommand { \foobar } { D\x\y{default} } {(#1)} +\foobar \x hello\y \par +\cs_set:Npn \x { def } +\foobar \x hello\y +\end{verbatim} +the output would be: +\begin{verbatim} +(hello) +(hello) +\end{verbatim} +with both calls to the command seeing the delimiter |\x|. - -\subsection{Measuring things} - -The first of these next commands was in \LaTeX~2.09. The two new -commands are the obvious analogues. +\subsection{Creating new argument processors} \begin{decl} -|\settowidth| \arg{length-cmd} \arg{lr text} \\ -|\settoheight| \arg{length-cmd} \arg{lr text} \\ -|\settodepth| \arg{length-cmd} \arg{lr text} + |\ProcessedArgument| \end{decl} +Argument processors allow manipulation of a grabbed argument before it is +passed to the underlying code. New processor implementations may be created +as functions which take one trailing argument, and which leave their result in +the \cs{ProcessedArgument} variable. For example, \cs{ReverseBoolean} is +defined as +\begin{verbatim} +\ExplSyntaxOn +\cs_new_protected:Npn \ReverseBoolean #1 + { + \bool_if:NTF #1 + { \tl_set:Nn \ProcessedArgument { \c_false_bool } } + { \tl_set:Nn \ProcessedArgument { \c_true_bool } } + } +\ExplSyntaxOff +\end{verbatim} +[As an aside: the code is written in \pkg{expl3}, so we don't have to + worry about spaces creeping into the definition.] -\subsection{Line endings} +\subsection{Access to the argument specification} -\NEWdescription{1994/12/01} -The command |\\|, which is used to indicate a line-end in various -places, is now a robust command when used within arguments such as -section titles. +The argument specifications for document commands and environments are +available for examination and use. -Also, because it is often necessary to distinguish which type of line -is to be ended, we have introduced the following new command; it -has the same argument syntax as that of |\\|. -\begin{decl}[1994/12/01] -|\tabularnewline| \oarg{vertical-space} +\begin{decl} + |\GetDocumentCommandArgSpec| \arg{function} \\ + |\GetDocumentEnvironmentArgSpec| \arg{environment} \end{decl} -One example of its use is when the text in the last -column of a |tabular| environment is set with |\raggedright|; then -|\tabularnewline| can be used to indicate the end of a row of the -|tabular|, whilst |\\| will indicate the end of a line of text in a -paragraph within the column. This command can be used in the |array| -environment as well as |tabular|, and also the extended versions of -these environments offered by the \textsf{array} and \textsf{longtable} -packages in the tools collection. - -\subsection{Controlling page breaks} - -Sometimes it is necessary, for a final version of a document, to -`help' \LaTeX\ break the pages in the best way. \LaTeX~2.09 had a -variety of commands for this situation: |\clearpage|, |\pagebreak| -etc. \LaTeXe\ provides, in addition, commands which can produce -longer pages as well as shorter ones. - +These functions transfer the current argument specification for the +requested \meta{function} or \meta{environment} into the token list +variable \cs{ArgumentSpecification}. If the \meta{function} or +\meta{environment} has no known argument specification then an error +is issued. The assignment to \cs{ArgumentSpecification} is local to +the current \TeX{} group. \begin{decl} -|\enlargethispage| \arg{size} \\ -|\enlargethispage*| \arg{size} + |\ShowDocumentCommandArgSpec| \arg{function} \\ + |\ShowDocumentEnvironmentArgSpec| \arg{environment} \end{decl} +These functions show the current argument specification for the +requested \meta{function} or \meta{environment} at the terminal. If +the \meta{function} or \meta{environment} has no known argument +specification then an error is issued. -These commands increase the height of a page (from its normal value of -|\textheight|) by the specified amount \m{size}, a rigid length. This -change affects \emph{only} the current page. -This can be used, for example, to allow an extra line to be fitted -onto the page or, with a negative length, to produce a page -shorter than normal. -The star form also shrinks any vertical white space on the page as -much as possible, so as to fit the maximum amount of text on the -page. +\section{Copying and showing (robust) commands} -\NEWdescription{1995/12/01} -These commands do not change the position of the footer text; thus, if -a page is lengthened too far, the main text may overprint the footer. +If you want to (slightly) alter an existing command you may want to +save the current definition under a new name and then use that in a +new definition. If the existing command is robust, then the old trick of +using the low-level \cs{let} for this doesn't work, because it only +copies the top-level definition, but not the part that actually does +the work. As most \LaTeX{} commands are nowadays robust, \LaTeX{} +now offers some high-level declarations for this instead. -\subsection{Floats} - -There is a new command, |\suppressfloats|, and a new `float -specifier'. These will enable people to gain better -control of \LaTeX's float placement algorithm. +However, please note that it is usually better to make use of +available hooks (e.g., the generic command or environment hooks), +instead of copying the current definition and thereby freezing it; see +the hook management documentation \texttt{lthooks-doc.pdf} for +details. \begin{decl} -|\suppressfloats| \oarg{placement} + |\NewCommandCopy| \arg{cmd} \arg{existing-cmd} \\ + |\RenewCommandCopy| \arg{cmd} \arg{existing-cmd} \\ + |\DeclareCommandCopy| \arg{cmd} \arg{existing-cmd} \end{decl} -This command stops any further floating environments from being placed -on the current page. With an optional argument, which should be either -|t| or |b| (not both), this restriction applies only to putting -further floats at the top or at the bottom. Any floats which would -normally be placed on this page are placed on the next page instead. - -\begin{decl} -The extra float location specifier: \ \texttt{!} -\end{decl} - -This can be used, along with at least one of \texttt{h}, \texttt{t}, -\texttt{b} and \texttt{p}, in the location optional argument of a -float. - -If a \texttt{!} is present then, just for this particular float, -whenever it is processed by the float mechanism the following are -ignored: -\begin{itemize} -\item all restrictions on the number of floats which can appear; -\item all explicit restrictions on the amount of space on a text page -which may be occupied by floats or must be occupied by text. -\end{itemize} -The mechanism will, however, still attempt to ensure that pages are -not overfull and that floats of the same type are printed in the -correct order. +This copies the definition of \meta{existing-cmd} to \meta{cmd}. After +this \meta{existing-cmd} can be redefined and \meta{cmd} +still works! This allows you to then provide a new definition for +\meta{existing-cmd} that makes use of \meta{cmd} (i.e., of its old +definition). For example, after +\begin{verbatim} +\NewCommandCopy\LaTeXorig\LaTeX +\RenewDocumentCommand\LaTeX{}{\textcolor{blue}{\LaTeXorig}} +\end{verbatim} +all \LaTeX{} logos generated with \cs{LaTeX} will come out in blue +(assuming you have a color package loaded). -Note that its presence has no effect on the production of float pages. +The differences between \cs{New...} and \cs{Renew...} are as +elsewhere: i.e., you get an error depending on whether or not +\meta{cmd} already exists, or in case of \cs{Declare...} it is copied +regardless. Note that there is no \cs{Provide...} declaration, because +that would be of limited value. -A \texttt{!} specifier overrides the effect of any |\suppressfloats| -command for this particular float. -\subsection{Font changing: text} +If the \meta{cmd} or \meta{existing-cmd} can't be provided as a single +token but need \enquote{constructing}, you can use \cs{ExpandArgs} +as explained in +Section~\ref{sec:preconstructing-csnames}. -The font selection scheme used in \LaTeXe{} differs a lot from that -used in \LaTeX~2.09. In this section, we give a brief description of -the new commands. A more detailed description with examples is given -in \emph{\LaTeXcomp}, and the interface for class- and package-writers -is described in \emph{\fntguide}. -\begin{decl} -|\normalfont|\\ -|\rmfamily|\\ -|\sffamily|\\ -|\ttfamily|\\ -|\mdseries|\\ -|\bfseries|\\ -|\upshape|\\ -|\itshape|\\ -|\slshape|\\ -|\scshape| -\end{decl} -These are font commands whose use is the same as the commands |\rm|, -|\bf|, etc. The difference is that each command changes just one -attribute of the font (the attribute changed is part of the name). -One result of this is that, for example, |\bfseries\itshape| produces -both a change of series and a change of shape, to give a bold italic -font. \begin{decl} -|\textnormal|\arg{text}\\ -|\textrm|\arg{text}\\ -|\textsf|\arg{text}\\ -|\texttt|\arg{text}\\ -|\textmd|\arg{text}\\ -|\textbf|\arg{text}\\ -|\textup|\arg{text}\\ -|\textit|\arg{text}\\ -|\textsl|\arg{text}\\ -|\textsc|\arg{text}\\ -|\emph|\arg{text} + |\ShowCommand| \arg{cmd} \end{decl} -These are one-argument commands; they take as an argument the -text which is to be typeset in the particular font. They also -automatically insert italic corrections where appropriate; if you do -not like the result, you can add an italic correction with |\/| or -remove it with |\nocorr|. The |\nocorr| should always be the first or -last thing within the \arg{text} argument. - -\subsection{Font changing: math} - -Most of the fonts used within math mode do not need to be explicitly -invoked; but to use letters from a range of fonts, the following -class of commands is provided. +This displays the meaning of the \meta{cmd} on the terminal and then +stops (just like the primitive \cs{show}). The difference is that it +correctly shows the meaning of more complex commands, e.g., in case of +robust commands it displays not only the top-level definition but +also the actual payload code and in case of commands declared with +\cs{NewDocumentCommand}, etc.\ it also gives you detailed information +about the argument signature. -\begin{decl} -|\mathrm| \arg{letters}\\ -|\mathnormal| \arg{letters}\\ -|\mathcal| \arg{letters}\\ -|\mathbf| \arg{letters}\\ -|\mathsf| \arg{letters}\\ -|\mathtt| \arg{letters}\\ -|\mathit| \arg{letters} -\end{decl} -These are also one-argument commands which take as an argument the -letters which are to be typeset in the particular font. The argument -is processed in math mode so spaces within it will be ignored. Only -letters, digits and accents have their font changed, for example -|$\mathbf{\tilde A \times 1}$| produces $\mathbf{\tilde A \times 1}$. +\section[Preconstructing command names \\ (or otherwise expanding arguments)] + {Preconstructing command names (or otherwise expanding arguments)} +\label{sec:preconstructing-csnames} -\subsection{Ensuring math mode} +When declaring new commands with \cs{NewDocumentCommand} or +\cs{NewCommandCopy} or similar, it is sometimes necessary to +``construct'' the csname. As a general mechanism the L3 programming +layer has \cs{exp_args:N...} for this, but there is no mechanism for +it if \cs{ExplSyntaxOn} is not active (and mixing programming and user +interface level commands is not a good approach anyhow). We therefore +offer a mechanism to access this ability using CamelCase naming. \begin{decl} -|\ensuremath| \arg{math commands} + |\UseName| \arg{string} \\ + |\ExpandArgs| \arg{spec} \arg{cmd} \arg{arg1} \dots \end{decl} -In \LaTeX~2.09, if you wanted a command to work both in math mode and -in text mode, the suggested method was to define something like: +\cs{UseName} turns the \meta{string} directly into a csname and +then executes it: this is equivalent to the long-standing +\LaTeXe{} internal command \cs{@nameuse}, or the L3 programming +equivalent \cs{use:c}. \cs{ExpandArgs} takes a \meta{spec} which +describes how to expand the \meta{arguments}, carries out these +operations then executes the \meta{cmd}. The \meta{spec} uses +the descriptions offered by the L3 programming layer, and the +relevant \cs{exp_args:N...} function must exist. Common cases will +have a \meta{spec} of \texttt{c}, \texttt{cc} or \texttt{Nc}: see below. + +As an example, the following declaration provides a method to generate +copyedit commands: \begin{verbatim} - \newcommand{\Gp}{\mbox{$G_p$}} +\NewDocumentCommand\newcopyedit{mO{red}} + {% + \newcounter{todo#1}% + \ExpandArgs{c}\NewDocumentCommand{#1}{s m}% + {% + \stepcounter{todo#1}% + \IfBooleanTF {##1}% + {\todo[color=#2!10]{\UseName{thetodo#1}: ##2}}% + {\todo[inline,color=#2!10]{\UseName{thetodo#1}: ##2}}% + }% + } \end{verbatim} -Unfortunately, the |\mbox| stops |\Gp| changing size correctly in (for -instance) subscripts or a fraction. +Given that declaration you can then write +\verb/\newcopyedit{note}[blue]/ which defines the command \cs{note} +and the corresponding counter for you. -In \LaTeXe{} you can define it thus: +A second example is to copy a command by string name using +\cs{NewCommandCopy}: here we might need to construct both command +names. \begin{verbatim} - \newcommand{\Gp}{\ensuremath{G_p}} +\NewDocumentCommand\savebyname{m} + {\ExpandArgs{cc}\NewCommandCopy{saved#1}{#1}} \end{verbatim} -Now |\Gp| will work correctly in all contexts. - -This is because the |\ensuremath| does nothing, producing simply -|G_p|, when |\Gp| is used within math mode; but it ensures that math -mode is entered (and exited) as required when |\Gp| is used in text -mode. - - -\subsection{Setting text superscripts} -\begin{decl} -|\textsuperscript| \arg{text} -\end{decl} - -\NEWfeature{1995/06/01} In \LaTeX~2.09 textual superscripts such as -footnote markers were produced by internally entering math mode and -typesetting the number as a math superscript. This normally looked -fine since the digits in math fonts are the same as those in text -fonts when Computer Modern fonts are used. But when a different -document font (such as Times) is selected, the results look rather -strange. For this reason the command |\textsuperscript| has been -introduced which typesets its argument in the current text font, in a -superscript position and in the correct size. - -\subsection{Text commands: all encodings} - -\NEWdescription{1994/12/01} - One of the main differences between \LaTeXe{} and \LaTeX~2.09 is - that \LaTeXe{} can deal with fonts in arbitrary \emph{encodings}. - (A font encoding is the sequence of characters in the font---for - example a Cyrillic font would have a different encoding from a Greek - font.) - - The two major font encodings that are used for Latin languages such - as English or German are |OT1| (Donald Knuth's 7-bit encoding, which - has been used during most of \TeX's lifetime) and |T1| (the new - 8-bit `Cork' encoding). - - \LaTeX~2.09 only supported the |OT1| encoding, whereas \LaTeXe{} has - support for both |OT1| and |T1| built-in. The next section will - cover the new commands which are available if you have |T1|-encoded - fonts. This section describes new commands which are available in - all encodings. - - Most of these commands provide characters which were available in - \LaTeX~2.09 already. For example |\textemdash| gives an `em dash', - which was available in \LaTeX~2.09 by typing |---|. However, some - fonts (for example a Greek font) may not have the |---| ligature, - but you will still be able to access an em dash by typing - |\textemdash|. - -\begin{decl}[1994/12/01] - |\r{}| -\end{decl} - This command gives a `ring' accent, for example `\r{o}' can be typed - |\r{o}|. - -\begin{decl}[1994/12/01] - |\SS| -\end{decl} - This command produces a German `SS', that is a capital `\ss'. This - letter can hyphenate differently from `SS', so is needed for entering - all-caps German. - -\begin{decl}[1994/12/01] - |\textcircled{}| -\end{decl} - This command is used to build `circled characters' such as - |\copyright|. For example |\textcircled{a}| produces - \textcircled{a}. - -\begin{decl}[1994/12/01] - |\textcompwordmark| -\end{decl} - This command is used to separate letters which would normally - ligature. For example `f\textcompwordmark i' is produced with - |f\textcompwordmark i|. Note that the `f' and `i' have not - ligatured to produce `fi'. This is rarely useful in English - (`shelf\textcompwordmark ful' is a rare example of where it might be - used) but is used in languages such as German. - -\begin{decl}[1994/12/01] - |\textvisiblespace| -\end{decl} - This command produces a `visible space' character - `\textvisiblespace'. This is sometimes used in computer listings, - for example `type \textsf{hello\textvisiblespace world}'. - -\begin{decl}[1994/12/01] - |\textemdash| - |\textendash| - |\textexclamdown| - |\textquestiondown| \\ - |\textquotedblleft| - |\textquotedblright| - |\textquoteleft| - |\textquoteright| -\end{decl} - These commands produce characters which would otherwise be - accessed via ligatures: - \begin{center} - \begin{tabular}{ccl} - \emph{ligature} & \emph{character} & \emph{command} \\ - |---| & --- & |\textemdash| \\ - |--| & -- & |\textendash| \\ - |!`| & !` & |\textexclamdown| \\ - |?`| & ?` & |\textquestiondown| \\ - |``| & `` & |\textquotedblleft| \\ - |''| & '' & |\textquotedblright| \\ - |`| & ` & |\textquoteleft| \\ - |'| & ' & |\textquoteright| - \end{tabular} - \end{center} - The reason for making these characters directly accessible is so - that they will work in encodings which do not have these characters. - -\begin{decl}[1994/12/01] - |\textbullet| - |\textperiodcentered| -\end{decl} - These commands allow access to characters which were previously only - available in math mode: - \begin{center} - \begin{tabular}{lcl} - \emph{math command} & \emph{character} & \emph{text command} \\ - |\bullet| & $\bullet$ & |\textbullet| \\ - |\cdot| & $\cdot$ & |\textperiodcentered| - \end{tabular} - \end{center} - -\begin{decl}[1995/12/01] - |\textbackslash| - |\textbar| - |\textless| - |\textgreater| -\end{decl} - These commands allow access to ASCII characters which were - only available in verbatim or math mode: - \begin{center} - \begin{tabular}{lcl} - \emph{math command} & \emph{character} & \emph{text command} \\ - |\backslash| & $\backslash$ & |\textbackslash| \\ - |\mid| & $\mid$ & |\textbar| \\ - |<<| & $<$ & |\textless| \\ - |>>| & $>$ & |\textgreater| - \end{tabular} - \end{center} - -\begin{decl}[1995/12/01] - |\textasciicircum| - |\textasciitilde| -\end{decl} - These commands allow access to ASCII characters which were - previously only available in verbatim: - \begin{center} - \begin{tabular}{cl} - \emph{verbatim} & \emph{text command} \\ - |^| & |\textasciicircum| \\ - |~| & |\textasciitilde| - \end{tabular} - \end{center} - -\begin{decl}[1995/12/01] - |\textregistered| - |\texttrademark| -\end{decl} - These commands provide the `registered trademark' (R) and - `trademark' (TM) symbols. - -\subsection{Text commands: the T1 encoding} - -\NEWdescription{1994/12/01} - The |OT1| font encoding is fine for typesetting in English, but has - problems when typesetting other languages. The |T1| encoding solves - some of these problems, by providing extra characters (such as `eth' - and `thorn'), and it allows words containing accented letters to be - hyphenated (as long as you have a package like |babel| which allows - for non-American hyphenation). - - This section describes the commands you can use if you have the |T1| - fonts. To use them, you need to get the `ec fonts', or the - |T1|-encoded PostScript fonts, as used by \textsf{psnfss}. - All these fonts are - available by anonymous ftp in the Comprehensive \TeX{} Archive, and - are also available on the CD-ROMs \emph{4all \TeX} and - \emph{\TeX{} Live} (both available from the \TeX{} Users Group). - - You can then select the |T1| fonts by saying: +In the \meta{spec} each \texttt{c} stands for one argument that is +turned into a `\texttt{c}'ommand. An \texttt{n} represents a +`\texttt{n}'ormal argument that is not altered and \texttt{N} stands for +a `\texttt{N}'ormal argument which is also left unchanged, but one +consisting only of a single token (and usually unbraced). Thus, to +construct a command from a string only for the second argument of +\cs{NewCommandCopy} you would write \begin{verbatim} - \usepackage[T1]{fontenc} +\ExpandArgs{Nc}\NewCommandCopy\mysectionctr{c@section} \end{verbatim} - This will allow you to use the commands in this section. +There are several other single letters supported in the L3 programming +layer that \emph{could} be used in the \meta{spec} to manipulate +arguments in other ways. If you are interested, take a look at the +\enquote{Argument expansion} section in the L3 programming layer +documentation in \texttt{interface3.pdf}. - \emph{Note:} Since this document must be processable on any site - running an up-to-date \LaTeX, it does not contain any characters - that are present only in |T1|-encoded fonts. This means that this - document cannot show you what these glyphs look like! If you want - to see them then run \LaTeX{} on the document |fontsmpl| and - respond `|cmr|' when it prompts you for a family name. -\begin{decl}[1994/12/01] - |\k{}| -\end{decl} - This command produces an `ogonek' accent. - -\begin{decl}[1994/12/01] - |\DH| - |\DJ| - |\NG| - |\TH| - |\dh| - |\dj| - |\ng| - |\th| -\end{decl} - These commands produce characters `eth', `dbar', `eng', and `thorn'. - -\begin{decl}[1994/12/01] - |\guillemotleft| - |\guillemotright| - |\guilsinglleft| - |\guilsinglright| \\ - |\quotedblbase| - |\quotesinglbase| - |\textquotedbl| -\end{decl} - % A local hack (could be improved): - \newcommand{\fauxguillemet}[1]{$\vcenter{\hbox{$\scriptscriptstyle#1$}}$} - These commands produce various sorts of quotation mark. - Rough representations of them are: - \fauxguillemet\ll a\fauxguillemet\gg{} - \fauxguillemet - ,\kern -0.1em,\kern 0.05em a\kern -0.05em`` - ,\kern 0.05em a\kern -0.05em` and |"|a|"|. - -\NEWdescription{2001/06/01} - There are therefore some extra short-form ligatures available for - use in documents that will only be used with |T1|-encoded fonts. - - The guillemets |\guillemotleft| and |\guillemotright|% - \footnote{We apologise once again for maintaining Adobe's - enormous solipsism~(sic) of confusing a diving bird with - punctuation marks!} - can be obtained by typing |<<<<| and |>>>>| and |\quotedblbase| - by typing |,,|\,. - - Also, unlike the unexpected results with - |OT1|-encoded fonts, |<<| and |>>| will produce \textless{} and - \textgreater{}. - - Note also that the single character |"| will no longer produce '' - but rather |\textquotedbl|. - -\subsection{Logos} -\begin{decl} -|\LaTeX|\\ -|\LaTeXe| -\end{decl} +\section{Expandable floating point (and other) calculations} -|\LaTeX| (producing `\LaTeX') is still the `main' logo command, -but if you need to refer to the new features, you can write -|\LaTeXe| (producing `\LaTeXe'). +The \LaTeX3 programming layer which is part of the format offers a +rich interface to manipulate floating point variables and values. To +allow for (simpler) applications to use this on document-level or in +packages otherwise not making use of the L3 programming layer a few +interface commands are made available. -\subsection{Picture commands} \begin{decl} - |\qbezier[](,)(,)(,)| \\ - | \bezier{}(,)(,)(,)| -\end{decl} -The |\qbezier| command can be used in |picture| mode to draw a -quadratic Bezier curve from position |(,)| to |(,)| with -control point |(,)|. The optional argument \m{N} gives the -number of points on the curve. - -For example, the diagram: -\begin{center} - \begin{picture}(50,50) - \thicklines - \qbezier(0,0)(0,50)(50,50) - \qbezier[20](0,0)(50,0)(50,50) - \thinlines - \put(0,0){\line(1,1){50}} - \end{picture} -\end{center} -is drawn with: -\begin{verbatim} - \begin{picture}(50,50) - \thicklines - \qbezier(0,0)(0,50)(50,50) - \qbezier[20](0,0)(50,0)(50,50) - \thinlines - \put(0,0){\line(1,1){50}} - \end{picture} -\end{verbatim} -The |\bezier| command is the same, except that the argument \m{N} is not -optional. It is provided for compatibility with the \LaTeX~2.09 -|bezier| document style option. - -\subsection{Old commands} - -\begin{decl} -|\samepage| + |\fpeval| \arg{floating point expression} \end{decl} -The |\samepage| command still exists but is no longer being -maintained. -This is because it only ever worked erratically; it does not -guarantee that there will be no page-breaks within its scope; and -it can cause footnotes and marginals to be wrongly placed. +The expandable command \cs{fpeval} takes as its argument a floating +point expression and produces a result using the normal rules of +mathematics. As this command is expandable it can be used where \TeX{} +requires a number and for example within a low-level \cs{edef} operation +to give a purely numerical result. -We recommend using |\enlargethispage| in conjunction with page-break -commands such as |\newpage| and |\pagebreak| to help control page -breaks. -\begin{decl} - |\SLiTeX| -\end{decl} -Since \SLiTeX{} no longer exists, the logo is no longer defined in the -\LaTeX{} kernel. A suitable replacement is |\textsc{Sli\TeX}|. The -\SLiTeX{} logo is defined in \LaTeX~2.09 compatibility mode. - -\begin{decl} -|\mho| |\Join| |\Box| |\Diamond| |\leadsto| \\ -|\sqsubset| |\sqsupset| |\lhd| |\unlhd| |\rhd| |\unrhd| -\end{decl} - -These symbols are contained in the \LaTeX{} symbol font, which was -automatically loaded by \LaTeX~2.09. However, \TeX{} has room for -only sixteen math font families; thus many users discovered that they -ran out. Because of this, \LaTeX{} does not load the \LaTeX{} symbol -font unless you use the \textsf{latexsym} package. - -These symbols are also made available, using different fonts, by the -\textsf{amsfonts} package, which also defines a large number of other -symbols. It is supplied by the American Mathematical Society. - -The \textsf{latexsym} package is loaded automatically in \LaTeX~2.09 -compatibility mode. - -\section{\LaTeX~2.09 documents} -\label{Sec:209} - -\LaTeXe{} can process (almost) any \LaTeX~2.09 document, by entering -\emph{\LaTeX~2.09 compatibility mode}. Nothing has changed, you run -\LaTeX{} in the same way you always did, and you will get much the -same results. - -The reason for the `almost' is that some \LaTeX~2.09 packages made use -of low-level unsupported features of \LaTeX. If you discover such a -package, you should find out if it has been updated to work with -\LaTeXe. Most packages will still work with \LaTeXe---the easiest way -to find out whether a package still works is to try it! - -\LaTeX~2.09 compatibility mode is a comprehensive emulation of -\LaTeX~2.09, but at the cost of time. Documents can run up to 50\% -slower in compatibility mode than they did under \LaTeX~2.09. -In addition, many of the new features of \LaTeXe{} are not available in -\LaTeX~2.09 compatibility mode. - -\subsection{Warning} - -\NEWdescription{1995/12/01} -This \emph{\LaTeX~2.09 compatibility mode} is provided solely to allow -you to process 2.09 documents, i.e.~documents that were written (we -hope, a long time ago) for a very old system and therefore could be -processed by using a genuine antique \LaTeX~2.09 system. - -This mode is therefore \emph{not} intended to provide access to the -enhanced features of \LaTeXe{}. Thus it must not be used to process -new documents which masquerade as 2.09 documents (i.e.~they begin with -|\documentstyle|) but which could not be processed using that genuine -antique \LaTeX~2.09 system because they contain some new, -\LaTeXe{}-only, commands or environments. - -To prevent such misuse of the system, and the consequent trouble it -causes when such misleadingly encoded documents are distributed, the -\emph{\LaTeX~2.09 compatibility mode} turns off most of these new -features and commands. Any attempt to use them will give you an error -message and, moreover, many of them simply will not work, whilst -others will produce unpredictable results. -So don't bother sending us any bug reports about such occurrences since -they are intentional. - - -\subsection{Font selection problems} -\label{Sec:fsprob} - -When using compatibility mode, it is possible that you will find -problems with font-changing commands in some old documents. These -problems are of two types: +Briefly, the floating point expressions may comprise: \begin{itemize} -\item producing error messages; -\item not producing the font changes you expected. + \item Basic arithmetic: addition $x\fpbin{+}y$, subtraction $x\fpbin{-}y$, + multiplication $x\fpbin{*}y$, division $x\fpbin{/}y$, square root~$\sqrt{x}$, + and parentheses. + \item Comparison operators: $x\fprel{<}y$, + $x\fprel{<=}y$, $x\fprel{>?}y$, + $x\fprel{!=}y$ \emph{etc.} + \item Boolean logic: sign $\fpop{sign} x$, + negation $\fpop{!}x$, conjunction + $x\fprel{\&\&}y$, disjunction $x\fprel{\string|\string|}y$, ternary + operator $x\fprel{?}y\fprel{:}z$. + \item Exponentials: $\fpop{exp} x$, $\fpop{ln} x$, $x\mathord{\texttt{\^{}}}y$. + \item Integer factorial: $\fpop{fact} x$. + \item Trigonometry: $\fpop{sin} x$, $\fpop{cos} x$, $\fpop{tan} x$, $\fpop{cot} x$, $\fpop{sec} + x$, $\fpop{csc} x$ expecting their arguments in radians, and + $\fpop{sind} x$, $\fpop{cosd} x$, + $\fpop{tand} x$, $\fpop{cotd} x$, + $\fpop{secd} x$, $\fpop{cscd} x$ expecting their + arguments in degrees. + \item Inverse trigonometric functions: $\fpop{asin} x$, + $\fpop{acos} x$, $\fpop{atan} x$, + $\fpop{acot} x$, $\fpop{asec} x$, + $\fpop{acsc} x$ giving a result in radians, and + $\fpop{asind} x$, $\fpop{acosd} x$, + $\fpop{atand} x$, $\fpop{acotd} x$, + $\fpop{asecd} x$, $\fpop{acscd} x$ giving a result + in degrees. + \item Extrema: $\fpop{max}(x_{1},x_{2},\ldots)$, $\fpop{min}(x_{1},x_{2},\ldots)$, + $\fpop{abs}(x)$. + \item Rounding functions, controlled by two optional + values, $n$ (number of places, $0$ by default) and + $t$ (behavior on a tie, $\nan$ by default): + \begin{itemize} + \item $\fpop{trunc}(x,n)$ rounds towards zero, + \item $\fpop{floor}(x,n)$ rounds towards~$-\infty$, + \item $\fpop{ceil}(x,n)$ rounds towards~$+\infty$, + \item $\fpop{round}(x,n,t)$ rounds to the closest value, with + ties rounded to an even value by default, towards zero if $t=0$, + towards $+\infty$ if $t>0$ and towards $-\infty$ if $t<0$. + \end{itemize} + \item Random numbers: $\fpop{rand}()$, $\fpop{randint}(m,n)$. + \item Constants: \texttt{pi}, \texttt{deg} (one degree in radians). + \item Dimensions, automatically expressed in points, \emph{e.g.}, + \texttt{pc} is~$12$. + \item Automatic conversion (no need for \cs{number}) of + integer, dimension, and skip variables to floating points numbers, + expressing dimensions in points and ignoring the stretch and + shrink components of skips. + \item Tuples: $(x_1,\ldots{},x_n)$ that can be added together, + multiplied or divided by a floating point number, and nested. \end{itemize} -In case of error messages it is possible that the document (or an old -style file used therein) contains references to old internal commands -which are no longer defined, see Section~\ref{Sec:oldinternals} for -more information if this is the case. - -\NEWdescription{1995/12/01} -One example of the unexpected is if you use one of the new style of -math-mode font changing command as follows: -\begin{verbatim} -$ \mathbf{xy} A $ -\end{verbatim} -You may well find that this behaves as if you had put: -\begin{verbatim} -$ \bf {xy} A $ -\end{verbatim} -everything including the $A$ coming out bold. - -\LaTeX~2.09 allowed sites to customize their \LaTeX{} installation, -which resulted in documents producing different results on different -\LaTeX{} installations. \LaTeXe{} no longer allows so much -customization but, for compatibility with old documents, the local -configuration file |latex209.cfg| is loaded every time \LaTeXe{} -enters \LaTeX~2.09 compatibility mode. - -For example, if your site was customized to use the New Font -Selection Scheme (\NFSS) with the |oldlfont| option, then you can -make \LaTeXe{} emulate this by creating a |latex209.cfg| file -containing the commands: -\begin{verbatim} -\ExecuteOptions{oldlfont}\RequirePackage{oldlfont} -\end{verbatim} -Similarly, to emulate \NFSS{} with the |newlfont| option, you can -create a |latex209.cfg| file containing: +An example of use could be the following: \begin{verbatim} -\ExecuteOptions{newlfont}\RequirePackage{newlfont} +\LaTeX{} can now compute: $ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3} + = \fpeval{sin(3.5)/2 + 2e-3} $. \end{verbatim} - - -\subsection{Native mode} -\label{Sec:native} - -To run an old document faster, and use the new features of -\LaTeXe, you should try using \emph{\LaTeXe{} native mode}. -This is done by replacing the command: -\begin{quote} - |\documentstyle[|\m{options}|,|\m{packages}|]|\arg{class} -\end{quote} -with: +which produces the following output: \begin{quote} - |\documentclass|\oarg{options}\arg{class} \\ - |\usepackage{latexsym,|\m{packages}|}| + \LaTeX{} can now compute: $ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3} + = \fpeval{sin(3.5)/2 + 2e-3} $. \end{quote} -However, some documents which can be processed in \LaTeX~2.09 -compatibility mode may not work in native mode. Some \LaTeX~2.09 -packages will only work with \LaTeXe{} in 2.09 compatibility mode. -Some documents will cause errors because of \LaTeXe's improved error -detection abilities. - -But most \LaTeX~2.09 documents can be processed by \LaTeXe{}'s native -mode with the above change. Again, the easiest way to find out -whether your documents can be processed in native mode is to try it! - - -\section{Local modifications} -\label{sec:loc} - -\NEWdescription{1995/12/01} -There are two common types of local modifications that can be done -very simply. Do not forget that documents produced using such -modifications will not be usable at other places (such documents are -called `non-portable'). - -One type of modification is the use of personal commands for commonly -used symbols or constructions. These should be put into a package -file (for example, one called \texttt{mymacros.sty}) and loaded by -putting |\usepackage{mymacros}| in the document preamble. - -Another type is a local document class that is very similar to one of -the standard classes but contains some straightforward modifications -such as extra environments, different values for some parameters, etc. -These should be put into a class file; here we shall describe a simple -method of constructing such a file using, as an example, a class -called \textsf{larticle} that is very similar to the \textsf{article} -class. - -\NEWfeature{1995/12/01} -The class file called \texttt{larticle.cls} should (after the -preliminary identification commands) start as follows: -\begin{verbatim} - \LoadClassWithOptions{article} -\end{verbatim} -This command should be followed by whatever additions and changes you -wish to make to the results of reading in the file -\texttt{article.sty}. - -The effect of using the above |\LoadClassWithOptions| command is to -load the standard class file \textsf{article} with whatever options -are asked for by the document. Thus a document using your -\textsf{larticle} class can specify any option that could be specified -when using the standard \textsf{article} class; for example: -\begin{verbatim} - \documentclass[a4paper,twocolumn,dvips]{larticle} -\end{verbatim} - - -\section{Problems} -\label{Sec:problems} - -This section describes some of the things which may go wrong when -using \LaTeXe, and what you can do about it. - -\subsection{New error messages} - -\LaTeXe{} has a number of new error messages. -Please also note that many error messages now produce further helpful -information if you press |h| in response to the error prompt. \begin{decl} -|Option clash for package |\m{package}|.| + |\inteval| \arg{integer expression} \end{decl} -The named package has been loaded twice with different options. If -you enter |h| you will be told what the options were, for example, if -your document contained: -\begin{verbatim} - \usepackage[foo]{fred} - \usepackage[baz]{fred} -\end{verbatim} -then you will get the error message: -\begin{verbatim} - Option clash for package fred. -\end{verbatim} -and typing |h| at the |?| prompt will give you: -\begin{verbatim} - The package fred has already been loaded with options: - [foo] - There has now been an attempt to load it with options: - [baz] - Adding the line: - \usepackage[foo,baz]{fred} - to your document may fix this. - Try typing <> to proceed. -\end{verbatim} -The cure is, as suggested, to load the package with both sets of -options. Note that since \LaTeX{} packages can call other packages, -it is possible to get a package option clash without explicitly -requesting the same package twice. -\begin{decl} - |Command |\m{command}| not provided in base NFSS.| -\end{decl} -The \m{command} is not provided by default in \LaTeXe. This error is -generated by using one of the commands: + The expandable command \cs{inteval} takes as its argument an integer + expression and produces a result using the normal rules of + mathematics with some restrictions, see below. The operations + recognized are |+|, |-|, |*| and |/| plus parentheses. As this + command is expandable it can be used where \TeX{} requires a number + and for example within a low-level \cs{edef} operation to give a + purely numerical result. + + This is basically a thin wrapper for the primitive \cs{numexpr} + command and therefore has some syntax restrictions. These are: + \begin{itemize} + \item \texttt{/} denotes division rounded to the closest integer with + ties rounded away from zero; + \item there is an error and the overall expression evaluates to zero + whenever the absolute value of any intermediate result exceeds + $2^{31}-1$, except in the case of scaling operations + $a$\texttt{*}$b$\texttt{/}$c$, for which $a$\texttt{*}$b$ may be + arbitrarily large; + \item parentheses may not appear after unary \texttt{+} or + \texttt{-}, namely placing \texttt{+(} or \texttt{-(} at the start + of an expression or after \texttt{+}, \texttt{-}, \texttt{*}, + \texttt{/} or~\texttt{(} leads to an error. + \end{itemize} + +An example of use could be the following. \begin{verbatim} - \mho \Join \Box \Diamond \leadsto - \sqsubset \sqsupset \lhd \unlhd \rhd \unrhd +\LaTeX{} can now compute: The sum of the numbers is $\inteval{1 + 2 + 3}$. \end{verbatim} -which are now part of the \textsf{latexsym} package. -The cure is to add: -\begin{verbatim} - \usepackage{latexsym} -\end{verbatim} -in the preamble of your document. - -\begin{decl} - |LaTeX2e command in LaTeX 2.09 document.| -\end{decl} -The \m{command} is a \LaTeXe{} command but this is a \LaTeX~2.09 -document. The cure is to replace the command by a \LaTeX~2.09 -command, or to run document in native mode, as described in -Section~\ref{Sec:native}. - -\begin{decl} - |NFSS release 1 command \newmathalphabet found.| -\end{decl} -The command |\newmathalphabet| was used by the New Font Selection -Scheme Release 1 but it has now been replaced by -|\DeclareMathAlphabet|, the use of which is described in -\emph{\fntguide}. - -The best cure is to update the package which contained the -|\newmathalphabet| command. Find out if there is a new release of -the package, or (if you wrote the package yourself) consult -\emph{\fntguide} for the new syntax of font commands. - -If there is no updated version of the package then you can cure this -error by using the \textsf{newlfont} or \textsf{oldlfont} package, -which tells \LaTeX{} which version of |\newmathalphabet| should be -emulated. - -You should use \textsf{oldlfont} if the document selects math fonts with -syntax such as this: -\begin{quote} - |{\cal A}|, etc. -\end{quote} -Use \textsf{newlfont} if the document's syntax is like this: -\begin{quote} - |\cal{A}|, etc. -\end{quote} - - -\begin{decl} - |Text for \verb command ended by end of line.| -\end{decl} -The |\verb| command has been begun but not ended on that line. This -usually means that you have forgotten to put in the end-character of -the |\verb| command. +which results in +\enquote{\LaTeX{} can now compute: The sum of the numbers is $\inteval{1 + 2 + 3}$.} -\begin{decl} - |Illegal use of \verb command.| -\end{decl} -The |\verb| command has been used inside the argument of another -command. This has never been allowed in \LaTeX{}---often producing -incorrect output without any warning---and so \LaTeXe{} produces -an error message. - -\subsection{Old internal commands} -\label{Sec:oldinternals} - -A number of \LaTeX~2.09 internal commands have been removed, since -their functionality is now provided in a different way. See -\emph{\clsguide} for more details of the new, supported interface for -class and package writers. \begin{decl} - |\tenrm| |\elvrm| |\twlrm| \dots\\ - |\tenbf| |\elvbf| |\twlbf| \dots\\ - |\tensf| |\elvsf| |\twlsf| \dots\\ - $\vdots$ + |\dimeval| \arg{dimen expression} \qquad + |\skipeval| \arg{skip expression} \end{decl} -These commands provided access to the seventy fonts preloaded by -\LaTeX~2.09. In contrast, \LaTeXe{} normally preloads at most -fourteen fonts, which saves a lot of font memory; but a consequence is -that any \LaTeX{} file which used the above commands to directly -access fonts will no longer work. -Their use will usually produce an error message such as: +Similar to \cs{inteval} but computing a length (\texttt{dimen}) or a +rubber length (\texttt{skip}) value. Both are thin wrappers around +the corresponding engine primitives, which makes them fast, but +therefore shows the same syntax peculiars as discussed +above. Nevertheless, in practice they are usually sufficient. For +example \begin{verbatim} - ! Undefined control sequence. - l.5 \tenrm +\newcommand\calulateheight[1]{% + \setlength\textheight{\dimeval{\topskip+\baselineskip*\inteval{#1-1}}}} \end{verbatim} -The cure for this is to update the document to use the new -font-changing commands provided by \LaTeXe; these are described in -\emph{\fntguide}. - -If this is not possible then, as a last resort, you can -use the \textsf{rawfonts} package, which loads the -seventy \LaTeX~2.09 fonts and provides direct access to them using the -old commands. This takes both time and memory. If you do not -wish to load all seventy fonts, you can select some of them by using the -|only| option to \textsf{rawfonts}. For example, to load only |tenrm| -and |tenbf| you write: -\begin{verbatim} - \usepackage[only,tenrm,tenbf]{rawfonts} -\end{verbatim} - -The \textsf{rawfonts} package is distributed as part of the \LaTeX{} -tools software, see Section~\ref{Sec:st-pack}. - -\subsection{Old files} - -One of the more common mistakes in running \LaTeX{} is to read in old -versions of packages instead of the new versions. If you get an -incomprehensible error message from a standard package, make sure you -are loading the most recent version of the package. You can find out -which version of the package has been loaded by looking in the log -file for a line like: -\begin{verbatim} - Package: fred 1994/06/01 v0.01 Fred's package. -\end{verbatim} -You can use the \m{release-date} options to |\documentclass| and -|\usepackage| to make sure that you are getting a suitably recent copy -of the document class or package. This is useful when sending a -document to another site, which may have out-of-date software. - -\subsection{Where to go for more help} - -If you can't find the answer for your problem here, try looking in -\emph{\LaTeXbook} or \emph{\LaTeXcomp}. If you have a problem with -installing \LaTeX, look in the installation guide files which come with -the distribution. - -If this doesn't help, contact your local \LaTeX{} guru or local -\LaTeX{} mailing list. - -If you think you've discovered a bug then please report it! First, -you should find out if the problem is with a third-party package or -class. If the problem is caused by a package or class other than -those listed in Section~\ref{Sec:class+packages} then please report -the problem to the author of the package or class, not to the \LaTeX3 -project team. - -If the bug really is with core \LaTeX{} then you should create a -\emph{short}, \emph{self-contained} document which exhibits the -problem. You should run a \emph{recent} (less than a year old) -version of \LaTeX{} on the file and then run \LaTeX{} on -|latexbug.tex|. This will create an error report which you should -send, together with the sample document and log file, to the -\LaTeX{} bugs address which can be found in the file -|latexbug.tex| or |bugs.txt|. - - -\section{Enjoy!} -\label{Sec:enjoy} - -We certainly hope you will enjoy using the new standard \LaTeX{} but, -if this is not possible, we hope that you will enjoy success and -fulfillment as a result of the documents which it will help you to -create. - -If you find that the contribution of \LaTeX{} to your life is such -that you would like to support the work of the project team, then -please read Section~\ref{Sec:ltx3} and discover practical ways to do -this. - -\begin{thebibliography}{1} - -\bibitem{A-W:GRM97} -Michel Goossens, Sebastian Rahtz and Frank Mittelbach. -\newblock {\em The {\LaTeX} Graphics Companion}. -\newblock Addison-Wesley, Reading, Massachusetts, 1997. - - -\bibitem{A-W:GR99} -Michel Goossens and Sebastian Rahtz. -\newblock {\em The {\LaTeX} Web Companion}. -\newblock Addison-Wesley, Reading, Massachusetts, 1999. - - -\bibitem{A-W:DEK91} -Donald~E. Knuth. -\newblock {\em The \TeX book}. -\newblock Addison-Wesley, Reading, Massachusetts, 1986. -\newblock Revised to cover \TeX3, 1991. - - -\bibitem{A-W:LLa94} -Leslie Lamport. -\newblock {\em {\LaTeX:} A Document Preparation System}. -\newblock Addison-Wesley, Reading, Massachusetts, second edition, 1994. - -\bibitem{A-W:MG2004} -Frank Mittelbach and Michel Goossens. -\newblock {\em The {\LaTeX} Companion second edition}. -\newblock With Johannes Braams, David Carlisle, and Chris Rowley. -\newblock Addison-Wesley, Reading, Massachusetts, 2004. - - -\end{thebibliography} +sets the \cs{textheight} to the appropriate value if a page should +hold a specific number of text lines. Thus after |\calulateheight{40}| +it is set to \dimeval{\topskip+\baselineskip*\inteval{40-1}}, given +the values \cs{topskip} (\dimeval{\topskip}) and \cs{baselineskip} +(\dimeval{\baselineskip}) in the current document. + +\section{Case changing} + +\TeX{} provides two primitives \cs{uppercase} and \cs{lowercase} for changing +the case of text. However, these have a range of limitations: they only change +the case of explicit characters, do not account for the surrounding context, do +not support UTF-8 input with 8-bit engines, etc. To overcome this problem, +\LaTeX{} provides the commands \cs{MakeUppercase}, \cs{MakeLowercase} and +\cs{MakeTitlecase}: these offer significant enhancement over the \TeX{} +primitives. These commands are engine-robust (\cs{protected}), and so +can be used in moving arguments. + +Upper- and lower-casing are well-understood in general conversation. +Titlecasing here follows the definition given by the Unicode Consortium: the +first character of the input will be converted to (broadly) uppercase, and the +rest of the input to lowercase. The full range of Unicode UTF-8 input can be +supported, with the proviso that at present the characters set up with 8-bit +engines match those available in standard input encodings (|T1|, |T2|, |LGR|). +\begin{quotation} + \begin{tabular}{rl} + |\MakeUppercase{hello WORLD ßüé}| & \MakeUppercase{hello WORLD ßüé} \\ + |\MakeLowercase{hello WORLD ßüé}| & \MakeLowercase{hello WORLD ßüé} \\ + |\MakeTitlecase{hello WORLD ßüé}| & \MakeTitlecase{hello WORLD ßüé} \\ + \end{tabular} +\end{quotation} + +The case-changing commands take an optional argument which can be used to +tailor the output. This optional argument accepts the key \texttt{locale}, +also available under the alias \texttt{lang}, +which can be used to give a language identifier in BCP-47 +format. This is then applied to select language-specific features during +case-changing. + +The input given to these commands is `expanded' before case changing is +applied. This means that any commands within the input that convert to pure +text will be case changed. Mathematical content is automatically excluded, as +are the arguments to the commands \cs{label}, \cs{ref}, \cs{cite}, \cs{begin} +and \cs{end}. Additional exclusions can be added using the command +\cs{AddToNoCaseChangeList}. Input can be excluded from case changing using the +command \cs{NoCaseChange}. +\begin{quotation} + \begin{tabular}{rl} + |\MakeUppercase{Some text $y = mx + c$}| + & \MakeUppercase{Some text $y = mx + c$} \\ + |\MakeUppercase{\NoCaseChange{iPhone}}| + & \MakeLowercase{\NoCaseChange{iPhone}} \\ + \end{tabular} +\end{quotation} + +To allow robust commands to be used within case changing \emph{and} to produce +the expected output, two additional control commands are available. +\cs{CaseSwitch} allows the user to specify the result for the four possible +cases +\begin{itemize} + \item No case changing + \item Uppercasing + \item Lowercasing + \item Titlecasing (only applies for the start of the input) +\end{itemize} +The command \cs{DeclareCaseChangeEquivalent} provides a way to substitute a +command by an alternative version when it is found inside a case changing +situation. \end{document} diff --git a/macros/latex/base/usrguide3.pdf b/macros/latex/base/usrguide3.pdf deleted file mode 100644 index 1a4d6d3b01..0000000000 Binary files a/macros/latex/base/usrguide3.pdf and /dev/null differ diff --git a/macros/latex/base/usrguide3.tex b/macros/latex/base/usrguide3.tex deleted file mode 100644 index a148c77ed5..0000000000 --- a/macros/latex/base/usrguide3.tex +++ /dev/null @@ -1,1112 +0,0 @@ -% \iffalse meta-comment -% -% Copyright (C) 2020-2022 -% The LaTeX Project and any individual authors listed elsewhere -% in this file. -% -% This file is part of the LaTeX base system. -% ------------------------------------------- -% -% It may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3c -% of this license or (at your option) any later version. -% The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3c or later is part of all distributions of LaTeX -% version 2008 or later. -% -% This file has the LPPL maintenance status "maintained". -% -% The list of all files belonging to the LaTeX base distribution is -% given in the file `manifest.txt'. See also `legal.txt' for additional -% information. -% -% The list of derived (unpacked) files belonging to the distribution -% and covered by LPPL is defined by the unpacking scripts (with -% extension .ins) which are part of the distribution. -% -% \fi -% Filename: usrguide3.tex - -\documentclass{ltxguide} - -\usepackage[T1]{fontenc} % needed for \textbackslash in tt -\usepackage{csquotes} - -\title{New \LaTeX\ methods for authors (starting 2020)} -\author{\copyright~Copyright 2020-2022, \LaTeX\ Project Team.\\ - All rights reserved.} - -\date{2022-07-05} - -\NewDocumentCommand\cs{m}{\texttt{\textbackslash\detokenize{#1}}} -\NewDocumentCommand\marg{m}{\arg{#1}} -\NewDocumentCommand\meta{m}{\ensuremath{\langle}\textit{#1}\ensuremath{\rangle}} -\NewDocumentCommand\pkg{m}{\textsf{#1}} -\NewDocumentCommand\text{m}{\ifmmode\mbox{#1}\else#1\fi} -% Fix a 'feature' -\makeatletter -\renewcommand \verbatim@font {\normalfont \ttfamily} -\makeatother - - -% for fpeval documentation - -\providecommand\fpop[1]{\mathop{\texttt{#1}}} -\providecommand\fpbin[1]{\mathbin{\texttt{#1}}} -\providecommand\fprel[1]{\mathrel{\texttt{#1}}} -\providecommand\nan{\texttt{NaN}} - -\ExplSyntaxOn -\ProvideExpandableDocumentCommand \fpeval { m } { \fp_eval:n {#1} } -\ExplSyntaxOff - -\begin{document} - -\maketitle - -\tableofcontents - -\section{Introduction} - -\LaTeXe{} was released in 1994 and added a number of then-new concepts to -\LaTeX{}. These are described in \texttt{usrguide}, which has largely remained -unchanged. Since then, the \LaTeX{} team have worked on a number of ideas, -firstly a programming language for \LaTeX{} (\pkg{expl3}) and then a range of -tools for document authors which build on that language. Here, we describe -\emph{stable} and \emph{widely-usable} concepts that have resulted from that -work. These `new' ideas have been transferred from development packages -into the \LaTeXe{} kernel. As such, they are now available to \emph{all} -\LaTeX{} users and have the \emph{same stability} as any other part of the -kernel. The fact that `behind the scenes' they are built on \pkg{expl3} -is useful for the development team, but is not directly important to users. - -\section{Creating document commands and environments} - -\subsection{Overview} - -Creating document commands and environments using the \LaTeX3 toolset is based -around the idea that a common set of descriptions can be used to cover almost -all argument types used in real documents. Thus parsing is reduced to a simple -description of which arguments a command takes: this description provides the -`glue' between the document syntax and the implementation of the -command. - -First, we will describe the argument types, then move on to explain how these -can be used to create both document commands and environments. Various more -specialized features are then described, which allow an even richer application -of a simple interface set up. - -The details here are intended to help users create document commands in -general. More technical detail, suitable for \TeX{} programmers, is included -in \texttt{interface3}. - -\subsection{Describing argument types} - -In order to allow each argument to be defined independently, the parser does -not simply need to know the number of arguments for a function, but also the -nature of each one. This is done by constructing an \emph{argument -specification}, which defines the number of arguments, the type of each -argument and any additional information needed for the parser to read the user -input and properly pass it through to internal functions. - -The basic form of the argument specifier is a list of letters, where each -letter defines a type of argument. As will be described below, some of the -types need additional information, such as default values. The argument types -can be divided into two, those which define arguments that are mandatory -(potentially raising an error if not found) and those which define optional -arguments. The mandatory types -\begin{itemize} - \item[\texttt{m}] A standard mandatory argument, which can either be a single token - alone or multiple tokens surrounded by curly braces |{}|. Regardless of the - input, the argument will be passed to the internal code without the outer - braces. This is the type specifier for a normal \TeX{} argument. - \item[\texttt{r}] Given as \texttt{r}\meta{token1}\meta{token2}, this denotes a - `required' delimited argument, where the delimiters are - \meta{token1} and \meta{token2}. If the opening delimiter \meta{token1} is - missing, the default marker |-NoValue-| will be inserted after a suitable - error. - \item[\texttt{R}] Given as \texttt{R}\meta{token1}\meta{token2}\marg{default}, - this is a `required' delimited argument as for~\texttt{r}, - but it has a user-definable recovery \meta{default} instead of - |-NoValue-|. - \item[\texttt{v}] Reads an argument `verbatim', between the following - character and its next occurrence, in a way similar to the argument - of the \LaTeXe{} command \cs{verb}. Thus a \texttt{v}-type argument - is read between two identical characters, which cannot be any of |%|, |\|, - |#|, |{|, |}| or \verb*| |. The verbatim argument can also be enclosed - between braces, |{| and |}|. A command with a verbatim argument will - produce an error when it appears within an argument of another function. - \item[\texttt{b}] Only suitable in the argument specification of an - environment, it denotes the body of the environment, between - |\begin|\marg{environment} and |\end|\marg{environment}. See - Section~\ref{sec:cmd:body} for details. -\end{itemize} -The types which define optional arguments are: -\begin{itemize} - \item[\texttt{o}] A standard \LaTeX{} optional argument, surrounded with square - brackets, which will supply the special |-NoValue-| marker if not given - (as described later). - \item[\texttt{d}] Given as \texttt{d}\meta{token1}\meta{token2}, an optional - argument which is delimited by \meta{token1} and \meta{token2}. As with - \texttt{o}, if no value is given the special marker |-NoValue-| is - returned. - \item[\texttt{O}] Given as \texttt{O}\marg{default}, is like \texttt{o}, but returns - \meta{default} if no value is given. - \item[\texttt{D}] Given as \texttt{D}\meta{token1}\meta{token2}\marg{default}, it is - as for \texttt{d}, but returns \meta{default} if no value is given. - Internally, the \texttt{o}, \texttt{d} and \texttt{O} types are - short-cuts to an appropriated-constructed \texttt{D} type argument. - \item[\texttt{s}] An optional star, which will result in a value - \cs{BooleanTrue} if a star is present and \cs{BooleanFalse} - otherwise (as described later). - \item[\texttt{t}] An optional \meta{token}, which will result in a value - \cs{BooleanTrue} if \meta{token} is present and \cs{BooleanFalse} - otherwise. Given as \texttt{t}\meta{token}. - \item[\texttt{e}] Given as \texttt{e}\marg{tokens}, a set of optional - \emph{embellishments}, each of which requires a \emph{value}. - If an embellishment is not present, |-NoValue-| is returned. Each - embellishment gives one argument, ordered as for the list of - \meta{tokens} in the argument specification. All \meta{tokens} - must be distinct. - \item[\texttt{E}] As for \texttt{e} but returns one or more \meta{defaults} - if values are not given: \texttt{E}\marg{tokens}\marg{defaults}. See - Section~\ref{sec:cmd:embellishment} for more details. -\end{itemize} - -\subsection{Modifying argument descriptions} - -In addition to the argument \emph{types} discussed above, the argument -description also gives special meaning to three other characters. - -First, \texttt{+} is used to make an argument long (to accept paragraph -tokens). In contrast to \cs{newcommand}, this applies on an -argument-by-argument basis. So modifying the example to `|s o o +m O{default}|' -means that the mandatory argument is now \cs{long}, whereas the optional -arguments are not. - -Secondly, \texttt{!} is used to control whether spaces are allowed before -optional arguments. There are some subtleties to this, as \TeX{} itself -has some restrictions on where spaces can be `detected': more detail -is given in Section~\ref{sec:cmd:opt-space}. - -Finally, the character \texttt{>} is used to declare so-called -`argument processors', which can be used to modify the contents of an -argument before it is passed to the macro definition. The use of argument -processors is a somewhat advanced topic, (or at least a less commonly used -feature) and is covered in Section~\ref{sec:cmd:processors}. - -\subsection{Creating document commands and environments} - -\begin{decl} - |\NewDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ - |\RenewDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ - |\ProvideDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ - |\DeclareDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} -\end{decl} -This family of commands are used to create a \meta{cmd}. The argument -specification for the function is given by \meta{arg spec}, and the command -uses the \meta{code} with |#1|, |#2|, etc.\ replaced by the arguments found -by the parser. - -An example: -\begin{verbatim} - \NewDocumentCommand\chapter{s o m} - {% - \IfBooleanTF{#1}% - {\typesetstarchapter{#3}}% - {\typesetnormalchapter{#2}{#3}}% - } -\end{verbatim} -would be a way to define a \cs{chapter} command which would essentially behave -like the current \LaTeXe{} command (except that it would accept an optional -argument even when a \texttt{*} was parsed). The \cs{typesetnormalchapter} -could test its first argument for being |-NoValue-| to see if an optional -argument was present. (See Section~\ref{sec:cmd:special} for details of -\cs{IfBooleanTF} and testing for |-NoValue-|.) - -The difference between the \cs{New...} \cs{Renew...}, \cs{Provide...} -and \cs{Declare...} versions is the behavior if \meta{cmd} is already -defined. -\begin{itemize} - \item \cs{NewDocumentCommand} will issue an error if \meta{cmd} - has already been defined. - \item \cs{RenewDocumentCommand} will issue an error if \meta{cmd} - has not previously been defined. - \item \cs{ProvideDocumentCommand} creates a new definition for - \meta{function} only if one has not already been given. - \item \cs{DeclareDocumentCommand} will always create the new - definition, irrespective of any existing \meta{cmd} with the - same name. This should be used sparingly. -\end{itemize} - -If the \meta{cmd} can't be provided as a single token but needs -\enquote{constructing}, you can use \cs{ExpandArgs} as explained in -Section~\ref{sec:preconstructing-csnames} which also gives an example -in which this is needed. - -\begin{decl} - |\NewDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\ - |\RenewDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\ - |\ProvideDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\ - |\DeclareDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} -\end{decl} -These commands work in the same way as \cs{NewDocumentCommand}, etc.\@, but -create environments (\cs{begin}\arg{env} \ldots{} -\cs{end}\arg{env}). Both the \meta{beg-code} and \meta{end-code} -may access the arguments as defined by \meta{arg spec}. The arguments will be -given following \cs{begin}\arg{env}. - -\subsection{Optional arguments} -\label{sec:cmd:opt} - -In contrast to commands created using \LaTeXe{}'s \cs{newcommand}, optional -arguments created using \cs{NewDocumentCommand} may safely be nested. Thus for -example, following -\begin{verbatim} -\NewDocumentCommand\foo{om}{I grabbed `#1' and `#2'} -\NewDocumentCommand\baz{o}{#1-#1} -\end{verbatim} -using the command as -\begin{verbatim} -\foo[\baz[stuff]]{more stuff} -\end{verbatim} -will print -\begin{quote} -I grabbed `stuff-stuff' and `more stuff' -\end{quote} -This is particularly useful when placing a command with an optional argument -\emph{inside} the optional argument of a second command. - -When an optional argument is followed by a mandatory argument with the same -delimiter, the parser issues a warning because the optional argument could not -be omitted by the user, thus becoming in effect mandatory. This can apply to -\texttt{o}, \texttt{d}, \texttt{O}, \texttt{D}, \texttt{s}, \texttt{t}, -\texttt{e}, and \texttt{E} type arguments followed by \texttt{r} or -\texttt{R}-type required arguments. - -The default for \texttt{O}, \texttt{D} and \texttt{E} arguments can be -the result of grabbing another argument. Thus for example -\begin{verbatim} - \NewDocumentCommand\foo{O{#2} m} -\end{verbatim} -would use the mandatory argument as the default for the leading optional -one. - -\subsection{Spacing and optional arguments} -\label{sec:cmd:opt-space} - -\TeX{} will find the first argument after a function name irrespective of any -intervening spaces. This is true for both mandatory and optional arguments. So -|\foo[arg]| and \verb*|\foo [arg]| are equivalent. Spaces are also ignored when -collecting arguments up to the last mandatory argument to be collected (as it -must exist). So after -\begin{verbatim} - \NewDocumentCommand\foo{m o m}{ ... } -\end{verbatim} -the user input |\foo{arg1}[arg2]{arg3}| and \verb*|\foo{arg1} [arg2] {arg3}| -will both be parsed in the same way. - -The behavior of optional arguments \emph{after} any mandatory arguments is -selectable. The standard settings will allow spaces here, and thus with -\begin{verbatim} - \NewDocumentCommand\foobar{m o}{ ... } -\end{verbatim} -both |\foobar{arg1}[arg2]| and \verb*|\foobar{arg1} [arg2]| will find an -optional argument. This can be changed by giving the modified |!| in the -argument specification: -\begin{verbatim} - \NewDocumentCommand\foobar{m !o}{ ... } -\end{verbatim} -where \verb*|\foobar{arg1} [arg2]| will not find an optional argument. - -There is one subtlety here due to the difference in handling by \TeX{} of -`control symbols', where the command name is made up of a single -character, such as `\texttt{\textbackslash\textbackslash}'. -Spaces are not ignored by \TeX{} here, -and thus it is possible to require an optional argument directly follow such a -command. The most common example is the use of \texttt{\textbackslash\textbackslash} -in \pkg{amsmath} environments, which in the terms here would be defined as -\begin{verbatim} - \NewDocumentCommand\\{!s !o}{ ... } -\end{verbatim} - -\subsection{`Embellishments'} -\label{sec:cmd:embellishment} - -The \texttt{E}-type argument allows one default value per test token. This is -achieved by giving a list of defaults for each entry in the list, for example: -\begin{verbatim} - E{^_}{{UP}{DOWN}} -\end{verbatim} -If the list of default values is \emph{shorter} than the list of test tokens, -the special |-NoValue-| marker will be returned (as for the \texttt{e}-type -argument). Thus for example -\begin{verbatim} - E{^_}{{UP}} -\end{verbatim} -has default \texttt{UP} for the |^| test character, but will return the -|-NoValue-| marker as a default for |_|. This allows mixing of explicit -defaults with testing for missing values. - - -\subsection{Testing special values} -\label{sec:cmd:special} - -Optional arguments make use of dedicated variables to return information about -the nature of the argument received. - - - -\begin{decl} - |\IfNoValueTF| \arg{arg} \arg{true code} \arg{false code} \\ - |\IfNoValueT| \arg{arg} \arg{true code} \\ - |\IfNoValueF| \arg{arg} \arg{false code} -\end{decl} -The \cs{IfNoValue(TF)} tests are used to check if \meta{argument} (|#1|, -|#2|, \emph{etc.}) is the special |-NoValue-| marker. For example -\begin{verbatim} - \NewDocumentCommand\foo{o m} - {% - \IfNoValueTF {#1}% - {\DoSomethingJustWithMandatoryArgument{#2}}% - {\DoSomethingWithBothArguments{#1}{#2}}% - } -\end{verbatim} -will use a different internal function if the optional argument -is given than if it is not present. - -Note that three tests are available, depending on which outcome -branches are required: \cs{IfNoValueTF}, \cs{IfNoValueT} and -\cs{IfNoValueF}. - -As the \cs{IfNoValue(TF)} tests are expandable, it is possible to -test these values later, for example at the point of typesetting or -in an expansion context. - -It is important to note that |-NoValue-| is constructed such that it -will \emph{not} match the simple text input |-NoValue-|, i.e.~that -\begin{verbatim} - \IfNoValueTF{-NoValue-} -\end{verbatim} -will be logically \texttt{false}. -When two optional arguments follow each other (a syntax we typically -discourage), it can make sense to allow users of the command to -specify only the second argument by providing an empty first -argument. -\NEWdescription{2022/06/01} -Rather than testing separately for emptiness and for -|-NoValue-| it is then best to use the argument type~|O| with an -empty default value, and then test for emptiness using the -conditional \cs{IfBlankTF} (described below) instead. - -\begin{decl} - |\IfValueTF| \arg{arg} \arg{true code} \arg{false code} \\ - |\IfValueT| \arg{arg} \arg{true code} \\ - |\IfValueF| \arg{arg} \arg{false code} -\end{decl} -The reverse form of the \cs{IfNoValue(TF)} tests are also available -as \cs{IfValue(TF)}. The context will determine which logical -form makes the most sense for a given code scenario. - - - - - -\begin{decl}[2022/06/01] - |\IfBlankTF| \arg{arg} \arg{true code} \arg{false code} \\ - |\IfBlankT| \arg{arg} \arg{true code} \\ - |\IfBlankF| \arg{arg} \arg{false code} -\end{decl} - - -The \cs{IfNoValueTF} command chooses the \meta{true code} if the optional argument has not -been used at all (and it returns the special \texttt{-NoValue-} -marker), but not if it has been given an empty value. In contrast -\cs{IfBlankTF} returns true if its argument is either truly empty or -only contains one or more normal blanks. -For example -\begin{verbatim} -\NewDocumentCommand\foo{m!o}{\par #1: - \IfNoValueTF{#2}{No optional}% - {\IfBlankTF{#2}{Blanks in or empty}% - {Real content in}}% - \space argument!} -\foo{1}[bar] \foo{2}[ ] \foo{3}[] \foo{4}[\space] \foo{5} [x] -\end{verbatim} -results -in the following output: -\begin{quote} - \NewDocumentCommand\foo{m!o}{\par #1: - \IfNoValueTF{#2}{No optional}% - {\IfBlankTF{#2}{Blanks in or empty}% - {Real content in}}% - \space argument!} - \foo{1}[bar] \foo{2}[ ] \foo{3}[] \foo{4}[\space] \foo{5} [x] -\end{quote} - -Note that the \cs{space} in (4) is considered real content---because it is -a command and not a \enquote{space} character---even though it results -in producing a space. You can also observe in (5) the effect of the -\texttt{!} specifier, preventing the last \cs{foo} -from interpreting \texttt{[x]} as its optional argument. - - - - -\begin{decl} - |\BooleanFalse| \\ - |\BooleanTrue| -\end{decl} -The \texttt{true} and \texttt{false} flags set when searching for -an optional character (using \texttt{s} or \texttt{t\meta{char}}) have -names which are accessible outside of code blocks. - -\begin{decl} - |\IfBooleanTF| \arg{arg} \arg{true code} \arg{false code} \\ - |\IfBooleanT| \arg{arg} \arg{true code} \\ - |\IfBooleanF| \arg{arg} \arg{false code} -\end{decl} -Used to test if \meta{argument} (|#1|, |#2|, \emph{etc.}) is -\cs{BooleanTrue} or \cs{BooleanFalse}. For example -\begin{verbatim} - \NewDocumentCommand\foo{sm} - {% - \IfBooleanTF {#1}% - {\DoSomethingWithStar{#2}}% - {\DoSomethingWithoutStar{#2}}% - } -\end{verbatim} -checks for a star as the first argument, then chooses the action to -take based on this information. - -\subsection{Argument processors} -\label{sec:cmd:processors} - -Argument processor are applied to an argument \emph{after} it has been grabbed -by the underlying system but before it is passed to \meta{code}. An argument -processor can therefore be used to regularize input at an early stage, allowing -the internal functions to be completely independent of input form. Processors -are applied to user input and to default values for optional arguments, but -\emph{not} to the special |-NoValue-| marker. - -Each argument processor is specified by the syntax \texttt{>}\marg{processor} -in the argument specification. Processors are applied from right to left, so -that -\begin{verbatim} - >{\ProcessorB} >{\ProcessorA} m -\end{verbatim} -would apply \cs{ProcessorA} followed by \cs{ProcessorB} to the tokens grabbed -by the \texttt{m} argument. - -\begin{decl} - |\SplitArgument| \arg{number} \arg{token(s)} -\end{decl} -This processor splits the argument given at each occurrence of the -\meta{tokens} up to a maximum of \meta{number} tokens (thus -dividing the input into $\text{\meta{number}} + 1$ parts). -An error is given if too many \meta{tokens} are present in the -input. The processed input is placed inside -$\text{\meta{number}} + 1$ sets of braces for further use. -If there are fewer than \arg{number} of \arg{tokens} in the argument -then |-NoValue-| markers are added at the end of the processed -argument. -\begin{verbatim} - \NewDocumentCommand \foo {>{\SplitArgument{2}{;}} m} - {\InternalFunctionOfThreeArguments#1} -\end{verbatim} -If only a single character \meta{token} is used for the split, any -category code $13$ (active) character matching the \meta{token} will -be replaced before the split takes place. -Spaces are trimmed at each end of each item parsed. - -The \texttt{E} argument type is somewhat special, because with a single -\texttt{E} in the command declaration you may end up with several -arguments in a command (one formal argument per embellishment token). -Therefore, when an argument processor is applied to an \texttt{E}-type -argument, all the arguments pass through that processor before being fed -to the \meta{code}. For example, this command -\begin{verbatim} - \NewDocumentCommand \foo { >{\TrimSpaces} e{_^} } - { [#1](#2) } -\end{verbatim} -applies \cs{TrimSpaces} to both arguments. - -\begin{decl} - |\SplitList| \arg{token(s)} -\end{decl} -This processor splits the argument given at each occurrence of the -\meta{token(s)} where the number of items is not fixed. Each item is -then wrapped in braces within |#1|. The result is that the -processed argument can be further processed using a mapping function -(see below). -\begin{verbatim} - \NewDocumentCommand \foo {>{\SplitList{;}} m} - {\MappingFunction#1} -\end{verbatim} -If only a single character \meta{token} is used for the split, any -category code $13$ (active) character matching the \meta{token} will -be replaced before the split takes place. -Spaces are trimmed at each end of each item parsed. - -\begin{decl} - |\ProcessList| \arg{list} \arg{function} -\end{decl} -To support \cs{SplitList}, the function \cs{ProcessList} is available -to apply a \meta{function} to every entry in a \meta{list}. The -\meta{function} should absorb one argument: the list entry. For example -\begin{verbatim} - \NewDocumentCommand \foo {>{\SplitList{;}} m} - {\ProcessList{#1}{\SomeDocumentCommand}} -\end{verbatim} - -\begin{decl} - |\ReverseBoolean| -\end{decl} -This processor reverses the logic of \cs{BooleanTrue} and -\cs{BooleanFalse}, so that the example from earlier would become -\begin{verbatim} - \NewDocumentCommand\foo{>{\ReverseBoolean} s m} - {% - \IfBooleanTF#1% - {\DoSomethingWithoutStar{#2}}% - {\DoSomethingWithStar{#2}}% - } -\end{verbatim} - -\begin{decl} - |\TrimSpaces| -\end{decl} -Removes any leading and trailing spaces (tokens with character code~$32$ -and category code~$10$) for the ends of the argument. Thus for example -declaring a function -\begin{verbatim} - \NewDocumentCommand\foo {>{\TrimSpaces} m} - {\showtokens{#1}} -\end{verbatim} -and using it in a document as -\begin{flushleft} - \verb= =\verb*=\foo{ hello world }= -\end{flushleft} -will show `\verb*=hello world=' at the terminal, with the space at each -end removed. \cs{TrimSpaces} will remove multiple spaces from the ends of -the input in cases where these have been included such that the standard -\TeX{} conversion of multiple spaces to a single space does not apply. - -\subsection{Body of an environment} -\label{sec:cmd:body} - -While environments |\begin|\marg{environment}\ \dots{}\,|\end|\marg{environment} -are typically used in cases where the code implementing the \meta{environment} -does not need to access the contents of the environment (its `body'), -it is sometimes useful to have the body as a standard argument. - -This is achieved by ending the argument specification with~\texttt{b}, which is -a dedicated argument type for this situation. For instance -\begin{verbatim} - \NewDocumentEnvironment{twice} {O{\ttfamily} +b} - {#2#1#2} {} -\end{verbatim} -\begin{verbatim} - \begin{twice}[\itshape] - Hello world! - \end{twice} -\end{verbatim} -typesets `Hello world!{\itshape Hello world!}'. - -The prefix |+| is used to allow multiple paragraphs in the environment's body. -Argument processors can also be applied to \texttt{b}~arguments. By default, -spaces are trimmed at both ends of the body: in the example there would -otherwise be spaces coming from the ends the lines after |[\itshape]| and -|world!|. Putting the prefix |!| before \texttt{b} suppresses space-trimming. - -When \texttt{b} is used in the argument specification, the last -argument of the environment declaration (e.g., -\cs{NewDocumentEnvironment}), which consists of an \meta{end code} to -insert at |\end|\marg{environment}, is redundant since one can simply -put that code at the end of the \meta{start code}. Nevertheless this -(empty) \meta{end code} must be provided. - -Environments that use this feature can be nested. - -\subsection{Fully-expandable document commands} - -Document commands created using \cs{NewDocumentCommand}, etc.\@, are normally -created so that they do not expand unexpectedly. This is done using engine -features, so is more powerful than \LaTeXe{}'s \cs{protect} mechanism. There -are \emph{very rare} occasion when it may be useful to create functions using a -expansion-only grabber. This imposes a number of restrictions on the -nature of the arguments accepted by a function, and the code it implements. -This facility should only be used when \emph{absolutely necessary}. - -\begin{decl} - |\NewExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ - |\RenewExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ - |\ProvideExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\ - |\DeclareExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} -\end{decl} -This family of commands is used to create a document-level \meta{function}, -which will grab its arguments in a fully-expandable manner. The -argument specification for the function is given by \meta{arg spec}, -and the function will execute \meta{code}. In general, \meta{code} will -also be fully expandable, although it is possible that this will -not be the case (for example, a function for use in a table might -expand so that \cs{omit} is the first non-expandable non-space token). - -Parsing arguments by pure expansion imposes a number of restrictions on -both the type of arguments that can be read and the error checking -available: -\begin{itemize} - \item The last argument (if any are present) must be one of the - mandatory types \texttt{m}, \texttt{r} or \texttt{R}. - \item The `verbatim' argument type \texttt{v} is not available. - \item Argument processors (using \texttt{>}) are not available. - \item It is not possible to differentiate between, for example - |\foo[| and |\foo{[}|: in both cases the \texttt{[} will be - interpreted as the start of an optional argument. As a - result, checking for optional arguments is less robust than - in the standard version. -\end{itemize} - -\subsection{Details about argument delimiters} - -In normal (non-expandable) commands, the delimited types look for the -initial delimiter by peeking ahead (using \pkg{expl3}'s |\peek_...| -functions) looking for the delimiter token. The token has to have the -same meaning and `shape' of the token defined as delimiter. -There are three possible cases of delimiters: character tokens, control -sequence tokens, and active character tokens. For all practical purposes -of this description, active character tokens will behave exactly as -control sequence tokens. - -\subsubsection{Character tokens} - -A character token is characterized by its character code, and its meaning -is the category code~(|\catcode|). When a command is defined, the meaning -of the character token is fixed into the definition of the command and -cannot change. A command will correctly see an argument delimiter if -the open delimiter has the same character and category codes as at the -time of the definition. For example in: -\begin{verbatim} - \NewDocumentCommand { \foobar } { D<>{default} } {(#1)} -\end{verbatim} -\begin{verbatim} - \foobar \par - \char_set_catcode_letter:N < - \foobar -\end{verbatim} -the output would be: -\begin{verbatim} - (hello) - (default) -\end{verbatim} -as the open-delimiter |<| changed in meaning between the two calls to -|\foobar|, so the second one doesn't see the |<| as a valid delimiter. -Commands assume that if a valid open-delimiter was found, a matching -close-delimiter will also be there. If it is not (either by being -omitted or by changing in meaning), a low-level \TeX{} error is raised -and the command call is aborted. - -\subsubsection{Control sequence tokens} - -A control sequence (or control character) token is characterized by is -its name, and its meaning is its definition. -A token cannot have two different meanings at the same time. -When a control sequence is defined as delimiter in a command, -it will be detected as delimiter whenever the control sequence name -is found in the document regardless of its current definition. -For example in: -\begin{verbatim} - \cs_set:Npn \x { abc } - \NewDocumentCommand { \foobar } { D\x\y{default} } {(#1)} - \foobar \x hello\y \par - \cs_set:Npn \x { def } - \foobar \x hello\y -\end{verbatim} -the output would be: -\begin{verbatim} - (hello) - (hello) -\end{verbatim} -with both calls to the command seeing the delimiter |\x|. - -\subsection{Creating new argument processors} - -\begin{decl} - |\ProcessedArgument| -\end{decl} -Argument processors allow manipulation of a grabbed argument before it is -passed to the underlying code. New processor implementations may be created -as functions which take one trailing argument, and which leave their result in -the \cs{ProcessedArgument} variable. For example, \cs{ReverseBoolean} is -defined as -\begin{verbatim} -\ExplSyntaxOn - \cs_new_protected:Npn \ReverseBoolean #1 - { - \bool_if:NTF #1 - { \tl_set:Nn \ProcessedArgument { \c_false_bool } } - { \tl_set:Nn \ProcessedArgument { \c_true_bool } } - } -\ExplSyntaxOff -\end{verbatim} -[As an aside: the code is written in \pkg{expl3}, so we don't have to - worry about spaces creeping into the definition.] - -\subsection{Access to the argument specification} - -The argument specifications for document commands and environments are -available for examination and use. - -\begin{decl} - |\GetDocumentCommandArgSpec| \arg{function} \\ - |\GetDocumentEnvironmentArgSpec| \arg{environment} -\end{decl} -These functions transfer the current argument specification for the -requested \meta{function} or \meta{environment} into the token list -variable \cs{ArgumentSpecification}. If the \meta{function} or -\meta{environment} has no known argument specification then an error -is issued. The assignment to \cs{ArgumentSpecification} is local to -the current \TeX{} group. - -\begin{decl} - |\ShowDocumentCommandArgSpec| \arg{function} \\ - |\ShowDocumentEnvironmentArgSpec| \arg{environment} -\end{decl} -These functions show the current argument specification for the -requested \meta{function} or \meta{environment} at the terminal. If -the \meta{function} or \meta{environment} has no known argument -specification then an error is issued. - - - -\section{Copying and showing (robust) commands} - -If you want to (slightly) alter an existing command you may want to -save the current definition under a new name and then use that in a -new definition. If the existing command is robust, then the old trick of -using the low-level \cs{let} for this doesn't work, because it only -copies the top-level definition, but not the part that actually does -the work. As most \LaTeX{} commands are nowadays robust, \LaTeX{} -now offers some high-level declarations for this instead. - -However, please note that it is usually better to make use of -available hooks (e.g., the generic command or environment hooks), -instead of copying the current definition and thereby freezing it; see -the hook management documentation \texttt{lthooks-doc.pdf} for -details. - -\begin{decl} - |\NewCommandCopy| \arg{cmd} \arg{existing-cmd} \\ - |\RenewCommandCopy| \arg{cmd} \arg{existing-cmd} \\ - |\DeclareCommandCopy| \arg{cmd} \arg{existing-cmd} -\end{decl} - -This copies the definition of \meta{existing-cmd} to \meta{cmd}. After -this \meta{existing-cmd} can be redefined and \meta{cmd} -still works! This allows you to then provide a new definition for -\meta{existing-cmd} that makes use of \meta{cmd} (i.e., of its old -definition). For example, after -\begin{verbatim} - \NewCommandCopy\LaTeXorig\LaTeX - \RenewDocumentCommand\LaTeX{}{\textcolor{blue}{\LaTeXorig}} -\end{verbatim} -all \LaTeX{} logos generated with \cs{LaTeX} will come out in blue -(assuming you have a color package loaded). - -The differences between \cs{New...} and \cs{Renew...} are as -elsewhere: i.e., you get an error depending on whether or not -\meta{cmd} already exists, or in case of \cs{Declare...} it is copied -regardless. Note that there is no \cs{Provide...} declaration, because -that would be of limited value. - - -If the \meta{cmd} or \meta{existing-cmd} can't be provided as a single -token but need \enquote{constructing}, you can use \cs{ExpandArgs} -as explained in -Section~\ref{sec:preconstructing-csnames}. - - - - -\begin{decl} - |\ShowCommand| \arg{cmd} -\end{decl} - -This displays the meaning of the \meta{cmd} on the terminal and then -stops (just like the primitive \cs{show}). The difference is that it -correctly shows the meaning of more complex commands, e.g., in case of -robust commands it displays not only the top-level definition but -also the actual payload code and in case of commands declared with -\cs{NewDocumentCommand}, etc.\ it also gives you detailed information -about the argument signature. - - -\section[Preconstructing command names \\ (or otherwise expanding arguments)] - {Preconstructing command names (or otherwise expanding arguments)} -\label{sec:preconstructing-csnames} - -When declaring new commands with \cs{NewDocumentCommand} or -\cs{NewCommandCopy} or similar, it is sometimes necessary to -``construct'' the csname. As a general mechanism the L3 programming -layer has \cs{exp_args:N...} for this, but there is no mechanism for -it if \cs{ExplSyntaxOn} is not active (and mixing programming and user -interface level commands is not a good approach anyhow). We therefore -offer a mechanism to access this ability using CamelCase naming. - -\begin{decl} - |\UseName| \arg{string} \\ - |\ExpandArgs| \arg{spec} \arg{cmd} \arg{arg1} \dots -\end{decl} - -\cs{UseName} turns the \meta{string} directly into a csname and -then executes it: this is equivalent to the long-standing -\LaTeXe{} internal command \cs{@nameuse}, or the L3 programming -equivalent \cs{use:c}. \cs{ExpandArgs} takes a \meta{spec} which -describes how to expand the \meta{arguments}, carries out these -operations then executes the \meta{cmd}. The \meta{spec} uses -the descriptions offered by the L3 programming layer, and the -relevant \cs{exp_args:N...} function must exist. Common cases will -have a \meta{spec} of \texttt{c}, \texttt{cc} or \texttt{Nc}: see below. - -As an example, the following declaration provides a method to generate -copyedit commands: -\begin{verbatim} -\NewDocumentCommand\newcopyedit{mO{red}} - {\newcounter{todo#1}% - \ExpandArgs{c}\NewDocumentCommand{#1}{s m}% - {\stepcounter{todo#1}% - \IfBooleanTF {##1}% - {\todo[color=#2!10]{\UseName{thetodo#1}: ##2}}% - {\todo[inline,color=#2!10]{\UseName{thetodo#1}: ##2}}% - }% - } -\end{verbatim} -Given that declaration you can then write -\verb/\newcopyedit{note}[blue]/ which defines the command \cs{note} -and the corresponding counter for you. - -A second example is to copy a command by string name using -\cs{NewCommandCopy}: here we might need to construct both command -names. -\begin{verbatim} -\NewDocumentCommand\savebyname{m} - {\ExpandArgs{cc}\NewCommandCopy{saved#1}{#1}} -\end{verbatim} - -In the \meta{spec} each \texttt{c} stands for one argument that is -turned into a `\texttt{c}'ommand. An \texttt{n} represents a -`\texttt{n}'ormal argument that is not altered and \texttt{N} stands for -a `\texttt{N}'ormal argument which is also left unchanged, but one -consisting only of a single token (and usually unbraced). Thus, to -construct a command from a string only for the second argument of -\cs{NewCommandCopy} you would write -\begin{verbatim} -\ExpandArgs{Nc}\NewCommandCopy\mysectionctr{c@section} -\end{verbatim} -There are several other single letters supported in the L3 programming -layer that \emph{could} be used in the \meta{spec} to manipulate -arguments in other ways. If you are interested, take a look at the -\enquote{Argument expansion} section in the L3 programming layer -documentation in \texttt{interface3.pdf}. - - - -\section{Expandable floating point (and other) calculations} - -The \LaTeX3 programming layer which is part of the format offers a -rich interface to manipulate floating point variables and values. To -allow for (simpler) applications to use this on document-level or in -packages otherwise not making use of the L3 programming layer a few -interface commands are made available. - - -\begin{decl} - |\fpeval| \arg{floating point expression} -\end{decl} - -The expandable command \cs{fpeval} takes as its argument a floating -point expression and produces a result using the normal rules of -mathematics. As this command is expandable it can be used where \TeX{} -requires a number and for example within a low-level \cs{edef} operation -to give a purely numerical result. - - - -Briefly, the floating point expressions may comprise: -\begin{itemize} - \item Basic arithmetic: addition $x\fpbin{+}y$, subtraction $x\fpbin{-}y$, - multiplication $x\fpbin{*}y$, division $x\fpbin{/}y$, square root~$\sqrt{x}$, - and parentheses. - \item Comparison operators: $x\fprel{<}y$, - $x\fprel{<=}y$, $x\fprel{>?}y$, - $x\fprel{!=}y$ \emph{etc.} - \item Boolean logic: sign $\fpop{sign} x$, - negation $\fpop{!}x$, conjunction - $x\fprel{\&\&}y$, disjunction $x\fprel{\string|\string|}y$, ternary - operator $x\fprel{?}y\fprel{:}z$. - \item Exponentials: $\fpop{exp} x$, $\fpop{ln} x$, $x\mathord{\texttt{\^{}}}y$. - \item Integer factorial: $\fpop{fact} x$. - \item Trigonometry: $\fpop{sin} x$, $\fpop{cos} x$, $\fpop{tan} x$, $\fpop{cot} x$, $\fpop{sec} - x$, $\fpop{csc} x$ expecting their arguments in radians, and - $\fpop{sind} x$, $\fpop{cosd} x$, - $\fpop{tand} x$, $\fpop{cotd} x$, - $\fpop{secd} x$, $\fpop{cscd} x$ expecting their - arguments in degrees. - \item Inverse trigonometric functions: $\fpop{asin} x$, - $\fpop{acos} x$, $\fpop{atan} x$, - $\fpop{acot} x$, $\fpop{asec} x$, - $\fpop{acsc} x$ giving a result in radians, and - $\fpop{asind} x$, $\fpop{acosd} x$, - $\fpop{atand} x$, $\fpop{acotd} x$, - $\fpop{asecd} x$, $\fpop{acscd} x$ giving a result - in degrees. - \item Extrema: $\fpop{max}(x_{1},x_{2},\ldots)$, $\fpop{min}(x_{1},x_{2},\ldots)$, - $\fpop{abs}(x)$. - \item Rounding functions, controlled by two optional - values, $n$ (number of places, $0$ by default) and - $t$ (behavior on a tie, $\nan$ by default): - \begin{itemize} - \item $\fpop{trunc}(x,n)$ rounds towards zero, - \item $\fpop{floor}(x,n)$ rounds towards~$-\infty$, - \item $\fpop{ceil}(x,n)$ rounds towards~$+\infty$, - \item $\fpop{round}(x,n,t)$ rounds to the closest value, with - ties rounded to an even value by default, towards zero if $t=0$, - towards $+\infty$ if $t>0$ and towards $-\infty$ if $t<0$. - \end{itemize} - \item Random numbers: $\fpop{rand}()$, $\fpop{randint}(m,n)$. - \item Constants: \texttt{pi}, \texttt{deg} (one degree in radians). - \item Dimensions, automatically expressed in points, \emph{e.g.}, - \texttt{pc} is~$12$. - \item Automatic conversion (no need for \cs{number}) of - integer, dimension, and skip variables to floating points numbers, - expressing dimensions in points and ignoring the stretch and - shrink components of skips. - \item Tuples: $(x_1,\ldots{},x_n)$ that can be added together, - multiplied or divided by a floating point number, and nested. -\end{itemize} - -An example of use could be the following: -\begin{verbatim} - \LaTeX{} can now compute: $ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3} - = \fpeval{sin(3.5)/2 + 2e-3} $. -\end{verbatim} -which produces the following output: -\begin{quote} - \LaTeX{} can now compute: $ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3} - = \fpeval{sin(3.5)/2 + 2e-3} $. -\end{quote} - -\begin{decl} - |\inteval| \arg{integer expression} -\end{decl} - - The expandable command \cs{inteval} takes as its argument an integer - expression and produces a result using the normal rules of - mathematics with some restrictions, see below. The operations - recognized are |+|, |-|, |*| and |/| plus parentheses. As this - command is expandable it can be used where \TeX{} requires a number - and for example within a low-level \cs{edef} operation to give a - purely numerical result. - - This is basically a thin wrapper for the primitive \cs{numexpr} - command and therefore has some syntax restrictions. These are: - \begin{itemize} - \item \texttt{/} denotes division rounded to the closest integer with - ties rounded away from zero; - \item there is an error and the overall expression evaluates to zero - whenever the absolute value of any intermediate result exceeds - $2^{31}-1$, except in the case of scaling operations - $a$\texttt{*}$b$\texttt{/}$c$, for which $a$\texttt{*}$b$ may be - arbitrarily large; - \item parentheses may not appear after unary \texttt{+} or - \texttt{-}, namely placing \texttt{+(} or \texttt{-(} at the start - of an expression or after \texttt{+}, \texttt{-}, \texttt{*}, - \texttt{/} or~\texttt{(} leads to an error. - \end{itemize} - -An example of use could be the following. -\begin{verbatim} -\LaTeX{} can now compute: The sum of the numbers is $\inteval{1 + 2 + 3}$. -\end{verbatim} -which results in -\enquote{\LaTeX{} can now compute: The sum of the numbers is $\inteval{1 + 2 + 3}$.} - - -\begin{decl} - |\dimeval| \arg{dimen expression} \qquad - |\skipeval| \arg{skip expression} -\end{decl} - -Similar to \cs{inteval} but computing a length (\texttt{dimen}) or a -rubber length (\texttt{skip}) value. Both are thin wrappers around -the corresponding engine primitives, which makes them fast, but -therefore shows the same syntax peculiars as discussed -above. Nevertheless, in practice they are usually sufficient. For -example -\begin{verbatim} -\newcommand\calulateheight[1]{% - \setlength\textheight{\dimeval{\topskip+\baselineskip*\inteval{#1-1}}}} -\end{verbatim} -sets the \cs{textheight} to the appropriate value if a page should -hold a specific number of text lines. Thus after |\calulateheight{40}| -it is set to \dimeval{\topskip+\baselineskip*\inteval{40-1}}, given -the values \cs{topskip} (\dimeval{\topskip}) and \cs{baselineskip} -(\dimeval{\baselineskip}) in the current document. - -\section{Case changing} - -\TeX{} provides two primitives \cs{uppercase} and \cs{lowercase} for changing -the case of text. However, these have a range of limitations: they only change -the case of explicit characters, do not account for the surrounding context, do -not support UTF-8 input with 8-bit engines, etc. To overcome this problem, -\LaTeX{} provides the commands \cs{MakeUppercase}, \cs{MakeLowercase} and -\cs{MakeTitlecase}: these offer significant enhancement over the \TeX{} -primitives. These commands are engine-robust (\cs{protected}), and so -can be used in moving arguments. - -Upper- and lower-casing are well-understood in general conversation. -Titlecasing here follows the definition given by the Unicode Consortium: the -first character of the input will be converted to (broadly) uppercase, and the -rest of the input to lowercase. The full range of Unicode UTF-8 input can be -supported, with the proviso that at present the characters set up with 8-bit -engines match those available in standard input encodings (|T1|, |T2|, |LGR|). -\begin{quotation} - \begin{tabular}{rl} - |\MakeUppercase{hello WORLD ßüé}| & \MakeUppercase{hello WORLD ßüé} \\ - |\MakeLowercase{hello WORLD ßüé}| & \MakeLowercase{hello WORLD ßüé} \\ - |\MakeTitlecase{hello WORLD ßüé}| & \MakeTitlecase{hello WORLD ßüé} \\ - \end{tabular} -\end{quotation} - -The input given to these commands is `expanded' before case changing is -applied. This means that any commands within the input that convert to pure -text will be case changed. Mathematical content is automatically excluded, as -are the arguments to the commands \cs{label}, \cs{ref}, \cs{cite}, \cs{begin} -and \cs{end}. Additional exclusions can be added using the command -\cs{AddToNoCaseChangeList}. Input can be excluded from case changing using the -command \cs{NoCaseChange}. -\begin{quotation} - \begin{tabular}{rl} - |\MakeUppercase{Some text $y = mx + c$}| - & \MakeUppercase{Some text $y = mx + c$} \\ - |\MakeUppercase{\NoCaseChange{iPhone}}| - & \MakeLowercase{\NoCaseChange{iPhone}} \\ - \end{tabular} -\end{quotation} - -To allow robust commands to be used within case changing \emph{and} to produce -the expected output, two additional control commands are available. -\cs{CaseSwitch} allows the user to specify the result for the four possible -cases -\begin{itemize} - \item No case changing - \item Uppercasing - \item Lowercasing - \item Titlecasing (only applies for the start of the input) -\end{itemize} -The command \cs{DeclareCaseChangeEquivalent} provides a way to substitute a -command by an alternative version when it is found inside a case changing -situation. - -\end{document} diff --git a/macros/latex/base/utf8ienc.dtx b/macros/latex/base/utf8ienc.dtx index 363998a853..a2b25fd3ab 100644 --- a/macros/latex/base/utf8ienc.dtx +++ b/macros/latex/base/utf8ienc.dtx @@ -152,9 +152,9 @@ % from \texttt{"C2} to \texttt{"DF} are defined to parse for a % second octet following, the characters from \texttt{"E0} to % \texttt{"EF} are defined to parse for two more octets and finally -% the characters from \texttt{"F0} to \texttt{"F3} are defined to +% the characters from \texttt{"F0} to \texttt{"F4} are defined to % parse for three additional octets. These additional octets are -% always in the range \texttt{"80} to \texttt{"B9}. +% always in the range \texttt{"80} to \texttt{"BF}. % % Thus, when such a character is encountered in the document (so % long as expansion is not prohibited) a defined number of diff --git a/macros/latex/base/utf8ienc.pdf b/macros/latex/base/utf8ienc.pdf index 2d31ae6666..1beff8335b 100644 Binary files a/macros/latex/base/utf8ienc.pdf and b/macros/latex/base/utf8ienc.pdf differ diff --git a/macros/latex/base/webcomp.pdf b/macros/latex/base/webcomp.pdf index 5282d9681c..c7998b003b 100644 Binary files a/macros/latex/base/webcomp.pdf and b/macros/latex/base/webcomp.pdf differ -- cgit v1.2.3