[latex3-commits] [git/LaTeX3-latex3-latex2e] gh239: Merge branch 'develop' into gh239 (3c2fc7c8)

PhelypeOleinik tex.phelype at gmail.com
Fri Jul 31 14:33:42 CEST 2020


Repository : https://github.com/latex3/latex2e
On branch  : gh239
Link       : https://github.com/latex3/latex2e/commit/3c2fc7c82c6c49407a0b0134d4bef08763bc6d6b

>---------------------------------------------------------------

commit 3c2fc7c82c6c49407a0b0134d4bef08763bc6d6b
Merge: 49bd81a8 a91ede24
Author: PhelypeOleinik <tex.phelype at gmail.com>
Date:   Fri Jul 31 09:33:42 2020 -0300

    Merge branch 'develop' into gh239


>---------------------------------------------------------------

3c2fc7c82c6c49407a0b0134d4bef08763bc6d6b
 README.md                                          |   20 +-
 base/README.md                                     |    2 +-
 base/build.lua                                     |   15 +-
 base/changes.txt                                   |  109 +-
 base/config-broken.lua                             |    3 +
 base/config-lthooks.lua                            |   12 +
 base/config-lthooks2.lua                           |   12 +
 base/doc.dtx                                       |   17 +-
 base/doc/fntguide.tex                              |  312 +-
 base/doc/ltfilehook-code.tex                       |   10 +
 base/doc/ltfilehook-doc.tex                        |   12 +
 base/doc/lthooks-code.tex                          |   10 +
 base/doc/lthooks-doc.tex                           |   12 +
 base/doc/ltnews32.tex                              |  292 +-
 base/doc/ltshipout-code.tex                        |   10 +
 base/doc/ltshipout-doc.tex                         |   12 +
 base/doc/source2e.tex                              |    4 +-
 base/doc/usrguide.tex                              |    8 +-
 base/docstrip.dtx                                  |  182 +-
 base/format.ins                                    |    2 +-
 base/ltclass.dtx                                   |   42 +-
 base/ltdefns.dtx                                   |   92 +-
 base/ltexpl.dtx                                    |  225 +-
 base/ltfilehook.dtx                                | 1161 ++++++
 base/ltfiles.dtx                                   |  191 +-
 base/ltfinal.dtx                                   |  251 +-
 base/ltfssaxes.dtx                                 |   13 +-
 base/ltfssini.dtx                                  |  159 +-
 base/lthooks.dtx                                   | 3925 +++++++++++++++++++
 base/lthooks.ins                                   |   76 +
 base/ltluatex.dtx                                  |   19 +-
 base/ltmiscen.dtx                                  |   29 +-
 base/ltnews.cls                                    |    4 +
 base/ltoutenc.dtx                                  |   72 +-
 base/ltpictur.dtx                                  |   10 +-
 base/ltshipout.dtx                                 | 1425 +++++++
 base/ltspace.dtx                                   |   14 +-
 base/ltvers.dtx                                    |    2 +-
 base/ltxdoc.dtx                                    |   13 +-
 base/ltxref.dtx                                    |   18 +-
 base/testfiles-TU/github-0332.luatex.tlg           |    5 -
 base/testfiles-TU/github-0332.tlg                  |    5 -
 base/testfiles-TU/tu-asciiquotes01.luatex.tlg      |   12 +-
 base/testfiles-TU/tu-textcomp-003.luatex.tlg       |    4 +-
 base/testfiles-TU/tu-textcomp-004.luatex.tlg       |    4 +-
 base/testfiles-disabled/filehook-ext.lvt           |  103 +
 base/testfiles-disabled/filehook-ext.tlg           |   53 +
 base/testfiles-disabled/lthooks-014.lvt            |  143 +
 base/testfiles-disabled/lthooks-014.tlg            |   70 +
 base/testfiles-disabled/lthooks-015.lvt            |   48 +
 base/testfiles-disabled/lthooks-015.tlg            |   38 +
 base/testfiles-disabled/lthooks2-001.lvt           |   32 +
 base/testfiles-disabled/lthooks2-001.tlg           |  299 ++
 base/testfiles-disabled/lthooks2-003.lvt           |   22 +
 base/testfiles-disabled/lthooks2-003.tlg           |   19 +
 base/testfiles-disabled/lthooks2-007.lvt           |  336 ++
 base/testfiles-disabled/lthooks2-007.tlg           |   24 +
 base/testfiles-disabled/shipout-001.lvt            |   61 +
 base/testfiles-disabled/shipout-001.tlg            |  341 ++
 base/testfiles-disabled/shipout-003.lvt            |   36 +
 base/testfiles-disabled/shipout-003.tlg            |   89 +
 base/testfiles-disabled/tlb-early-expl3.lvt        |  140 +
 base/testfiles-disabled/tlb-early-expl3.tlg        |   33 +
 base/testfiles-legacy/utf8-test-001.tlg            |    4 +-
 base/testfiles-lthooks/filehook-001.lvt            |  134 +
 base/testfiles-lthooks/filehook-001.tlg            |  105 +
 base/testfiles-lthooks/filehook-002.lvt            |   18 +
 base/testfiles-lthooks/filehook-002.tlg            |   77 +
 base/testfiles-lthooks/filehook-003.lvt            |   30 +
 base/testfiles-lthooks/filehook-003.tlg            |   77 +
 base/testfiles-lthooks/filehook-004.lvt            |   32 +
 base/testfiles-lthooks/filehook-004.tlg            |   19 +
 base/testfiles-lthooks/filehook-005.lvt            |   93 +
 base/testfiles-lthooks/filehook-005.tlg            |   91 +
 base/testfiles-lthooks/filehook-006.lvt            |   67 +
 base/testfiles-lthooks/filehook-006.tlg            |  150 +
 base/testfiles-lthooks/helpers/blub.tex            |    1 +
 base/testfiles-lthooks/helpers/no sympathy.tex     |    1 +
 base/testfiles-lthooks/helpers/test                |    1 +
 base/testfiles-lthooks/helpers/test.dtx            |    1 +
 base/testfiles-lthooks/helpers/test.tex            |    1 +
 base/testfiles-lthooks/helpers/testpath/deep.tex   |    1 +
 base/testfiles-lthooks/helpers/zzzz                |    1 +
 base/testfiles-lthooks/lthooks-000.lvt             |   21 +
 base/testfiles-lthooks/lthooks-000.tlg             |   65 +
 base/testfiles-lthooks/lthooks-001.lvt             |   45 +
 base/testfiles-lthooks/lthooks-001.tlg             |  142 +
 base/testfiles-lthooks/lthooks-002.lvt             |   54 +
 base/testfiles-lthooks/lthooks-002.tlg             |  146 +
 base/testfiles-lthooks/lthooks-003.lvt             |   67 +
 base/testfiles-lthooks/lthooks-003.tlg             |  136 +
 base/testfiles-lthooks/lthooks-004.lvt             |   45 +
 base/testfiles-lthooks/lthooks-004.tlg             |  108 +
 base/testfiles-lthooks/lthooks-005.lvt             |   63 +
 base/testfiles-lthooks/lthooks-005.tlg             |  136 +
 base/testfiles-lthooks/lthooks-006.lvt             |   40 +
 base/testfiles-lthooks/lthooks-006.tlg             |   96 +
 base/testfiles-lthooks/lthooks-007.lvt             |   51 +
 base/testfiles-lthooks/lthooks-007.tlg             |  154 +
 base/testfiles-lthooks/lthooks-008.lvt             |   53 +
 base/testfiles-lthooks/lthooks-008.tlg             |  121 +
 base/testfiles-lthooks/lthooks-009.lvt             |   41 +
 base/testfiles-lthooks/lthooks-009.tlg             |   80 +
 base/testfiles-lthooks/lthooks-010.lvt             |   70 +
 base/testfiles-lthooks/lthooks-010.tlg             |  122 +
 base/testfiles-lthooks/lthooks-011.lvt             |   40 +
 base/testfiles-lthooks/lthooks-011.tlg             |  226 ++
 base/testfiles-lthooks/lthooks-012.lvt             |   76 +
 base/testfiles-lthooks/lthooks-012.tlg             |   56 +
 base/testfiles-lthooks/lthooks-013.lvt             |   53 +
 base/testfiles-lthooks/lthooks-013.tlg             |  219 ++
 base/testfiles-lthooks/lthooks-016.lvt             |   44 +
 base/testfiles-lthooks/lthooks-016.tlg             |   44 +
 base/testfiles-lthooks/lthooks-017.lvt             |   33 +
 base/testfiles-lthooks/lthooks-017.tlg             |   24 +
 base/testfiles-lthooks/lthooks-018.lvt             |   22 +
 base/testfiles-lthooks/lthooks-018.tlg             |   18 +
 base/testfiles-lthooks/lthooks-019.lvt             |  154 +
 base/testfiles-lthooks/lthooks-019.tlg             |  339 ++
 base/testfiles-lthooks/lthooks-020.lvt             |  112 +
 base/testfiles-lthooks/lthooks-020.tlg             |  142 +
 base/testfiles-lthooks/lthooks-021.lvt             |   34 +
 .../lthooks-021.tlg}                               |    0
 base/testfiles-lthooks/lthooks-022.lvt             |   38 +
 base/testfiles-lthooks/lthooks-022.tlg             |   60 +
 base/testfiles-lthooks/lthooks-023.lvt             |   37 +
 base/testfiles-lthooks/lthooks-023.tlg             |   30 +
 base/testfiles-lthooks/lthooks-024.lvt             |   96 +
 base/testfiles-lthooks/lthooks-024.tlg             |  220 ++
 base/testfiles-lthooks/shipout-000.lvt             |   18 +
 base/testfiles-lthooks/shipout-000.tlg             |    2 +
 base/testfiles-lthooks/shipout-002.lvt             |   27 +
 base/testfiles-lthooks/shipout-002.tlg             |  532 +++
 base/testfiles-lthooks/shipout-004.lvt             |   29 +
 base/testfiles-lthooks/shipout-004.tlg             |   87 +
 base/testfiles-lthooks/shipout-005.lvt             |   29 +
 base/testfiles-lthooks/shipout-005.tlg             |  113 +
 base/testfiles-lthooks2/lthooks2-002.lvt           |   36 +
 base/testfiles-lthooks2/lthooks2-002.tlg           |  139 +
 base/testfiles-lthooks2/lthooks2-004.lvt           |   40 +
 base/testfiles-lthooks2/lthooks2-004.tlg           |   15 +
 base/testfiles-lthooks2/lthooks2-005.lvt           |   28 +
 base/testfiles-lthooks2/lthooks2-005.tlg           |   79 +
 base/testfiles-lthooks2/lthooks2-006.lvt           |   52 +
 base/testfiles-lthooks2/lthooks2-006.tlg           |  130 +
 base/testfiles-lthooks2/shipout2-004.lvt           |   29 +
 base/testfiles-lthooks2/shipout2-004.tlg           |   87 +
 base/testfiles-lthooks2/shipout2-006.lvt           |   24 +
 base/testfiles-lthooks2/shipout2-006.tlg           |  113 +
 base/testfiles/github-0073.luatex.tlg              |    1 +
 base/testfiles/github-0073.tlg                     |    1 +
 base/testfiles/github-0217-base.lvt                |   46 +
 base/testfiles/github-0217-base.tlg                |   18 +
 base/testfiles/github-0217-io-base.luatex.tlg      |   21 +
 base/testfiles/github-0217-io-base.lvt             |  174 +
 base/testfiles/github-0217-io-base.tlg             |   20 +
 base/testfiles/github-0217-io-space.luatex.tlg     |   20 +
 base/testfiles/github-0217-io-space.lvt            |  182 +
 base/testfiles/github-0217-io-space.tlg            |   20 +
 base/testfiles/github-0217-space.luatex.tlg        |   18 +
 base/testfiles/github-0217-space.lvt               |   45 +
 base/testfiles/github-0217-space.tlg               |   18 +
 base/testfiles/github-0218.luatex.tlg              |    9 +
 base/testfiles/github-0218.lvt                     |   20 +
 base/testfiles/github-0218.tlg                     |    9 +
 base/testfiles/github-0247.lvt                     |   37 +
 base/testfiles/github-0247.tlg                     |    5 +
 base/testfiles/github-0300-currentcounter.lvt      |   10 +
 base/testfiles/github-0300-currentcounter.tlg      |    6 +
 base/testfiles/github-0300-rollback.lvt            |   12 +
 base/testfiles/github-0300-rollback.tlg            |    5 +
 base/testfiles/github-0335.lvt                     |   17 +
 base/testfiles/github-0335.tlg                     |    5 +
 base/testfiles/github-0336.lvt                     |   41 +
 base/testfiles/github-0336.tlg                     |   28 +
 base/testfiles/github-0344.lvt                     |   37 +
 base/testfiles/github-0344.tlg                     |   28 +
 base/testfiles/github-0354.lvt                     |   21 +
 base/testfiles/github-0354.tlg                     |   13 +
 base/testfiles/github-robust-0123.luatex.tlg       |   16 +-
 base/testfiles/github-robust-0123.lvt              |    2 +-
 base/testfiles/github-robust-0123.tlg              |   16 +-
 base/testfiles/github-robust-0123.xetex.tlg        |   16 +-
 base/testfiles/tlb-latexrelease-rollback-002.tlg   |   13 +
 .../tlb-latexrelease-rollback-003-often.luatex.tlg |   74 +
 .../tlb-latexrelease-rollback-003-often.tlg        |   74 +
 .../tlb-latexrelease-rollback-003-often.xetex.tlg  |   74 +
 base/testfiles/tlb-rollback-004-often.luatex.tlg   |   39 +-
 base/testfiles/tlb-rollback-004-often.tlg          |   39 +-
 base/testfiles/tlb-rollback-004-often.xetex.tlg    |   39 +-
 base/testfiles/tlb2140.luatex.tlg                  |  521 ++-
 base/testfiles/tlb2140.tlg                         |  480 ++-
 base/testfiles/tlb3855-20170101.luatex.tlg         |   38 +-
 base/testfiles/tlb3855-20170101.lvt                |    6 +-
 base/testfiles/tlb3855.luatex.tlg                  |   46 +-
 base/testfiles/tlb3855.lvt                         |    6 +-
 base/testfiles/tlcs01b.luatex.tlg                  |    4 +-
 base/testfiles/tlcs01b.tlg                         |    4 +-
 base/testfiles/tlcs01r.tlg                         |    4 +-
 base/testfiles/tltc001.luatex.tlg                  |   19 +-
 base/testfiles/tltc001.tlg                         |   19 +-
 base/testfiles/tltx001.luatex.tlg                  |    1 +
 base/testfiles/tltx001.tlg                         |    1 +
 base/testfiles/tltx001.xetex.tlg                   |    1 +
 base/testfiles/tltx003.lvt                         |    1 +
 base/testfiles/tlxs01b.tlg                         |    4 +-
 base/testfiles/tlxs01r.tlg                         |    4 +-
 base/unpack.ins                                    |    1 +
 build-config.lua                                   |    1 +
 required/amsmath/README.md                         |    2 +-
 required/graphics/README.md                        |    2 +-
 required/graphics/changes.txt                      |    4 +
 required/graphics/lscape.dtx                       |    7 +-
 required/tools/README.md                           |    2 +-
 required/tools/array.dtx                           |   52 +-
 required/tools/changes.txt                         |   23 +
 required/tools/config-broken.lua                   |    3 +
 required/tools/testfiles-TU/github-0352.luatex.tlg |  230 ++
 required/tools/testfiles-TU/github-0352.lvt        |   39 +
 required/tools/testfiles-TU/github-0352.tlg        |  140 +
 .../tools/testfiles-search/tlb-varioref-003.tlg    |    5 -
 .../tools/testfiles-search/tlb-varioref-004.tlg    |    5 -
 required/tools/testfiles/github-0222-input.lvt     |   43 +
 required/tools/testfiles/github-0222-input.tlg     |   10 +
 required/tools/testfiles/github-0223.lvt           |   59 +
 required/tools/testfiles/github-0223.tlg           |   12 +
 required/tools/testfiles/github-0322.lvt           |   63 +
 required/tools/testfiles/github-0322.tlg           |    8 +
 required/tools/testfiles/tlb-multicol-004.tlg      | 1127 +-----
 ...multicol-004.tlg => tlb-multicol-004.xetex.tlg} |  446 +++
 required/tools/varioref.dtx                        |   87 +-
 required/tools/verbatim.dtx                        |   29 +-
 required/tools/xr.dtx                              |   13 +-
 support/regression-test.tex                        |  180 +
 support/texlive.sh                                 |    6 +
 texmf/tex/latex/l3backend/l3backend-dvipdfmx.def   |   90 +-
 texmf/tex/latex/l3backend/l3backend-dvips.def      |  138 +-
 texmf/tex/latex/l3backend/l3backend-dvisvgm.def    |   84 +-
 texmf/tex/latex/l3backend/l3backend-pdfmode.def    |  113 +-
 texmf/tex/latex/l3backend/l3backend-xdvipdfmx.def  |   94 +-
 texmf/tex/latex/l3kernel/expl3-code.tex            | 4104 ++++++++++++--------
 texmf/tex/latex/l3kernel/expl3-generic.tex         |    2 +-
 texmf/tex/latex/l3kernel/expl3.ltx                 |   80 +-
 texmf/tex/latex/l3kernel/expl3.sty                 |   88 +-
 texmf/tex/latex/l3kernel/l3debug.def               |   31 +-
 texmf/tex/latex/l3kernel/l3deprecation.def         |  167 +-
 texmf/tex/latex/l3kernel/l3doc.cls                 |    2 +-
 .../tex/latex/l3packages/xparse/xparse-generic.tex | 2283 +++++++++++
 texmf/tex/latex/l3packages/xparse/xparse.ltx       |   30 +
 texmf/tex/latex/l3packages/xparse/xparse.sty       |  172 +
 250 files changed, 26055 insertions(+), 3670 deletions(-)

diff --cc base/changes.txt
index bf00058f,1ef6f2cd..7b3eab37
--- a/base/changes.txt
+++ b/base/changes.txt
@@@ -6,11 -6,113 +6,118 @@@ completeness or accuracy and it contain
  are not part of the distribution.
  ================================================================================
  
 +2020-05-09  Phelype Oleinik  <phelype.oleinik at latex-project.org>
 +
 +	* ltdefns.dtx (subsection{Robust commands and protect}):
 +	Added \DeclareCommandCopy et al. to the kernel (gh/239)
 +
+ 2020-07-16  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+ 
+ 	* ltmiscen.dtx: \begin should not be long for better
+ 	error recovery (gh/354)
+ 
+ 2020-07-09  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+ 
+ 	* lthooks.dtx, ltshipout.dtx, ltfilehook.dtx:
+ 	Integrate hook management into the kernel
+ 
+ 2020-07-08  Joseph Wright  <joseph.wright at latex-project.org>
+ 
+ 	* ltexpl.dtx:
+ 	Add hook \@expl at finalise@setup@@
+ 
+ 	* ltfinal.dtx:
+ 	Execute hook \@expl at finalise@setup@@
+ 
+ 2020-07-07  Johannes Braams  <Johannes.Braams at latex-project.org>
+ 
+ 	* docstrip.dtx: Merge the @@-module functionality of
+ 	l3docstrip.dtx into docstrip.dtx (gh/337)
+ 
+ 2020-07-04  Marcel Krüger  <Marcel.Krueger at latex-project.org>
+ 
+ 	* ltoutenc.dtx:
+ 	Suppress tlig ligatures in LuaTeX without font reloading (gh/165)
+ 
+ 2020-06-15  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+ 
+ 	* doc.dtx (subsection{Macros surrounding the `definition parts'}):
+ 	Void \@labels for vertical typesetting (gh/344)
+ 
+ 2020-06-05  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+ 
+ 	* ltdefns.dtx (subsection{Loading further extensions}):
+ 	Moved loading of ltexpl.ltx earlier (from ltfinal.dtx) to ltdefns to
+ 	allow usage of expl3 extensions while loading the kernel.  Further
+ 	changes to support this one listed below:
+ 
+ 	* ltfinal.dtx:
+ 	Removed loading of ltexpl.ltx
+ 
+ 	* ltclass.dtx:
+ 	Added \@expl at push@filename@@ and \@expl at push@filename at aux@@ to
+ 	\@pushfilename and \@expl at pop@filename@@ to \@popfilename.
+ 
+ 	* ltfiles.dtx (section{File Handling}):
+ 	Added \@expl at sys@load at backend@@ in \document.
+ 
+ 	* ltexpl.dtx:
+ 	- Added blank definitions for \@expl at sys@load at backend@@,
+ 	  \@expl at push@filename@@, \@expl at push@filename at aux@@, and
+ 	  \@expl at pop@filename@@.
+ 	- Added temporary definitions for some kernel commands.
+ 
+ 2020-06-04  Marcel Krüger    <Marcel.Krueger at latex-project.org>
+ 
+ 	* format.ins: Load ltluatex.dtx before ltdefns.dtx
+ 
+ 2020-05-31  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+ 
+ 	* ltmiscen.dtx (subsection{Center, Flushright, Flushleft}):
+ 	% Added \finalhyphendemerits=0 to avoid extra line in
+ 	\centering, \raggedleft or \raggedright (gh/247)
+ 
+ 2020-05-19  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+ 
+ 	* ltfssini.dtx (section{Custom series settings for main document families}):
+ 	Added \IfFontSeriesContextTF so that it is possible to reliably
+ 	detect the current font series context (gh/335)
+ 
+ 2020-05-17  Johannes Braams  <Johannes.Braams at latex-project.org>
+ 
+ 	* ltxdoc.dtx: Support spaces within filenames (gh/218)
+ 
+ 2020-05-15  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+ 
+ 	* ltdefns.dtx (subsection{Initex initialisations}):
+ 	Allow \par in the argument of \typeout and turn it into an empty line
+ 	if expanded, if not it remains \par (gh/335)
+ 
+ 2020-05-11  Marcel Krüger    <Marcel.Krueger at latex-project.org>
+ 
+ 	* ltdefns.dtx:
+ 	Use primitive \- with LuaTeX
+ 
+ 2020-05-07  Ulrike Fischer <Ulrike.Fischer at latex-project.org>
+ 
+ 	* ltxref.dtx:
+ 	added \@currentcounter to \refstepcounter (gh/300)
+ 
+ 2020-05-06  Marcel Krüger    <Marcel.Krueger at latex-project.org>
+ 
+ 	* ltspace.dtx:
+ 	Make Unicode softhyphen U+00AD active and defined as \-.
+ 
+ 2020-05-02  Johannes Braams  <Johannes.Braams at latex-project.org>
+ 
+ 	* ltexpl.dtx: Created aliases for two expl3 macros in order to use
+ 	them to remove leading and trailing spaces from filenames (gh/217)
+ 
+ 2020-05-02  Johannes Braams  <Johannes.Braams at latex-project.org>
+ 
+ 	* ltfiles.dtx: Modified \include and \includeony to support
+ 	filenames with spaces in them (gh/217)
+ 
  2020-04-29  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
  
  	* lttextcomp.dtx (subsection{Sub-encoding 2}):
diff --cc base/doc/ltnews32.tex
index ef35c7bc,fdea39b6..808f5f81
--- a/base/doc/ltnews32.tex
+++ b/base/doc/ltnews32.tex
@@@ -386,31 -506,95 +506,119 @@@ are ignored as elsewhere
  \githubissue{327}
  
  
 +\subsection{Provide a way to copy commands}
 +
 +With the previous \LaTeXe{} release, several user-level commands were
 +made robust, so the need for a way to create copies of these commands
 +(often to redefine them) increased, and the \LaTeXe{} kernel didn't have
 +a way to do so.  Previously this functionality was provided in part by
 +Heiko Oberdiek's \pkg{letltxmacro} package, which allows a robust
 +command \verb=\foo= to be copied to \verb=\bar= with
 +\verb=\LetLtxMacro\bar\foo=.
 +
 +From this release onwards, the \LaTeXe{} kernel provides
 +\cs{NewCommandCopy} (and \verb=\Renew...=, \verb=\Declare...=, and
 +\verb=\Provide...= variants) which functions almost like
 +\verb=\LetLtxMacro=.  To the end user, both should work the same way,
 +and one shouldn't need to worry about the definition of the command:
 +\cs{NewCommandCopy} should do the hard work.
 +
 +\cs{NewCommandCopy} knows about the different types of definitions from
 +the \LaTeXe{} kernel, and also from other packages, such as
 +\pkg{xparse}'s command declarations like \cs{NewDocumentCommand}, and
 +\pkg{etoolbox}'s \cs{newrobustcmd}, and it can be extended to cover
 +further packages.
 +
 +\githubissue{239}
  
+ \subsection{Merge \pkg{l3docstrip} into \pkg{docstrip}}
+ 
+ The file \pkg{l3docstrip.tex} offered a small extension over the
+ original \pkg{docstrip.tex} file supporting the
+ \texttt{\%\string<@@=\meta{module}\string>} syntax of \pkg{expl3}.
+ This has now been merged into \pkg{docstrip} so that it can now be
+ used both for traditional \texttt{.dtx} files and those containing
+ code written in the L3 programming layer language.
+ %
+ \githubissue{337}
+ 
+ 
+ \subsection{Support vertical typesetting with \pkg{doc}}
+ 
+ The \texttt{macrocode} environment uses a \texttt{trivlist} internally
+ and as part of this sets up the \cs{@labels} box to contain some
+ horizontal skips, but that box is never used. As a result this
+ generates an issue in some circumstances if the typesetting direction
+ is vertical. This has now been corrected to support such use cases as
+ well.
+ %
+ \githubissue{344}
+ 
+ 
+ \subsection{Record the counter name stepped by \cs{refstepcounter}}
+ 
+ \cs{refstepcounter} now stores the name of counter in \cs{@currentcounter}.
+ This allows packages like \pkg{zref} and \pkg{hyperref} to store the name without
+ having to patch \cs{refstepcounter}.
+ %
+ \githubissue{300}
+ 
+ 
+ \subsection{Native Lua\TeX\ behaviour for \cs{-}}
+ 
+ \LaTeX\ changes \cs{-} to add a discretionary hyphen even if \cs{hyphenchar}
+ is set to $-1$. This change is not necessary under Lua\TeX\ because in there
+ \cs{-} is not affected by \cs{hyphenchar} in the first place. Therefore this
+ behaviour has been changed to ensure that Lua\TeX's (language specific)
+ hyphenation characters are respected by \cs{-}.
+ 
+ 
+ 
+ \subsection{Allow \cs{par} commands inside \cs{typeout}}
+ 
+ \cs{typeout} used to choke when seeing an empty line or a \cs{par}
+ command in its argument.  However, sometimes it is used to display
+ arbitrary user input or code (wrapped, for example, in
+ \cs{unexpanded}) which may contain explicit \cs{par} commands. This is
+ now allowed.
+ %
+ \githubissue{335}
+ 
+ \subsection{Spacing commands moved from \pkg{amsmath} to the kernel}
+ Originally \LaTeX{} only provided a small set of spacing commands
+ for use in text and math, some of the commands like \cs{;} were
+ only supported in math mode. \texttt{amsmath} normalized  and
+ provided all of them in text and math. This code has now been
+ moved to the kernel so that it is generally available.
+ %
+ \githubissue{303}
+ 
+ \begin{tabular}{lll}
+ command name(s)              & math   & text\\\hline
+ \cs{,}  \cs{thinspace}       & $x\,x$ & x\,x\\
+ \cs{!}  \cs{negthinspace}    & $x\!x$ & x\!x\\
+ \cs{:} \cs{>} \cs{medspace}  & $x\:x$ & x\:x\\
+ \cs{negmedspace}             & $x\negmedspace x$ & x\negmedspace x\\
+ \cs{;} \cs{thickspace}       & $x\;x$ & x\;x\\
+ \cs{negthickspace}           & $x\negthickspace x$ & x\negthickspace x\\
+ \end{tabular}
+ 
+ 
+ 
+ \subsection{Access raw glyphs in \LuaTeX\ without reloading fonts}
+ 
+ \LaTeX's definitions for \cs{textquotesingle}, \cs{textasciigrave}, and
+ \cs{textquotedbl} for the TU encoding in \LuaTeX\ need special handling to
+ stop the shaper from replacing these characters with curly quotes.
+ This used to be done by reloading the current font without the \texttt{tlig}
+ feature, but that came with multiple disadvantages: It behaves different
+ than the corresponding \XeTeX\ code and it is not very efficient.
+ This code has now been replaced with a implementation which injects a
+ protected glyph nodes which is not affected by font shaping.
+ %
+ \githubissue{165}
+ 
+ 
  
  \section{Changes to packages in the \pkg{graphics} category}
  
diff --cc base/ltdefns.dtx
index 77c4ee64,3abd251e..5abe0387
--- a/base/ltdefns.dtx
+++ b/base/ltdefns.dtx
@@@ -32,7 -32,7 +32,7 @@@
  %<*driver>
  % \fi
  \ProvidesFile{ltdefns.dtx}
-              [2020/05/09 v1.5h LaTeX Kernel (definition commands)]
 -             [2020/06/04 v1.5i LaTeX Kernel (definition commands)]
++             [2020/07/31 v1.5j LaTeX Kernel (definition commands)]
  % \iffalse
  \documentclass{ltxdoc}
  \GetFileInfo{ltdefns.dtx}
@@@ -1261,353 -1287,8 +1287,353 @@@
  % \end{macro}
  %
  %
 +% \begin{macro}{\NewCommandCopy}
 +% \begin{macro}{\RenewCommandCopy}
 +% \begin{macro}{\DeclareCommandCopy}
- % \changes{v1.5h}{2020/05/09}{Added \cs{DeclareCommandCopy} (gh/239)}
++% \changes{v1.5j}{2020/05/09}{Added \cs{DeclareCommandCopy} (gh/239)}
 +%
 +%   With most document level commands being robust now there is more of a
 +%   requirement to have a standard way of aliasing (or copying) a command to a
 +%   new name, for example to save an original definition before changing a
 +%   command.  \cs{DeclareCommandCopy} is analogous to \TeX's \cs{let}, except
 +%   that it copes with the different types of robust commands defined by
 +%   \LaTeX's mechanisms.
 +%
 +%   A couple of ``types of robustness'' are defined by the \LaTeXe{} kernel,
 +%   namely robust commands defined with \cs{DeclareRobustCommand} and commands
 +%   with optional arguments defined with \cs{newcommand}.  However there are
 +%   other types of robust commands that are frequently used, which are not
 +%   defined in the \LaTeXe{} kernel, like commands defined with
 +%   \textsf{xparse}'s \cs{NewDocumentCommand} and \textsf{etoolbox}'s
 +%   \cs{newrobustcmd}.  Here we will define a generic \cs{DeclareCommandCopy}
 +%   that will check \LaTeXe's robust types out of the box, but that can be
 +%   extended to work with other packages' robust commands.
 +%
 +%    \begin{macrocode}
 +%</2ekernel>
 +%<latexrelease>\IncludeInRelease{2020-10-01}{\DeclareCommandCopy}
 +%<latexrelease>  {Add \NewCommandCopy, \RenewCommandCopy, and \DeclareCommandCopy}%
 +%<*2ekernel|latexrelease>
 +%    \end{macrocode}
 +%
 +%   \cs{DeclareCommandCopy} just calls \cs{declare at command@copy} with \cs{relax},
 +%   which serves as a prefix for definitions.  Heiko Oberdiek's
 +%   \textsf{letltxmacro} defines a global variant of \cs{LetLtxMacro}, but since
 +%   none of our definition commands have a global version, this one won't either,
 +%   for consistency.
 +%
 +%   \cs{NewCommandCopy} checks if \verb=#1= is already defined, and raises an
 +%   error if so, otherwise the definition is carried out.
 +%   \cs{RenewCommandCopy} does (almost) the opposite.  If the command is
 +%   \emph{not} defined, then an error is raised.  But the definition is carried
 +%   out anyhow, so the behaviour is consistent with \cs{renewcommand}.
 +%
 +%   A \cs{ProvideCommandCopy} isn't defined because it's not reasonably useful.
 +%   \verb=\provide...= commands mean ``define this if there's no other
 +%   definition'', but copying a command (usually) implies that the command being
 +%   copied is defined, so \cs{ProvideCommandCopy} doesn't make a lot of sense.
 +%   But more importantly, the most common use case of copying a command is to
 +%   redefine it later, while preserving the old definition, as in:
 +% \begin{verbatim}
 +%   \ProvideComandCopy \A \B
 +%   \renewcommand \B { ... \A ...}
 +% \end{verbatim}
 +%   then, if \verb=\A= is already defined the first line is skipped, an in this
 +%   case \verb=\B= won't work as expected.
 +%    \begin{macrocode}
 +\def\NewCommandCopy{%
 +  \declare at commandcopy%
 +    {\@firstofone}%
 +    {\@firstoftwo\@notdefinable}}
 +\def\RenewCommandCopy{%
 +  \declare at commandcopy%
 +    {\@latex at error{Command \@backslashchar\reserved at a\space undefined}\@ehc
 +     \@firstofone}%
 +    {\@firstofone}}
 +\def\DeclareCommandCopy{%
 +  \declare at commandcopy%
 +    {\@firstofone}%
 +    {\@firstofone}}
 +%    \end{macrocode}
 +%
 +% \begin{macro}{\declare at commandcopy}
 +%   Start by checking if the command is already defined.  The proper action is
 +%   taken by each specific command above.  If all's good, then
 +%   \cs{declare at command@copy} is called with the command being defined and the
 +%   command being copied.
 +%    \begin{macrocode}
 +\def\declare at commandcopy#1#2#3#4{%
 +  \edef\reserved at a{\@expl at cs@to at str@@N#3}%
 +  \@ifundefined\reserved at a{#1}{#2}%
 +    {\declare at command@copy#3#4}}
 +%    \end{macrocode}
 +%
 +% \begin{macro}{\declare at command@copy}
 +% \begin{macro}{\declare at command@copy at loop}
 +% \begin{macro}{\declare at command@copy at loop@aux}
 +% \begin{macro}{\declare at command@copy at do}
 +% \begin{macro}{\declare at command@copy at let}
 +% \begin{macro}{\declare at command@copy at chk@args}
 +% \begin{macro}{\@declarecommandcopylisthook}
 +%   \cs{declare at command@copy at loop} will start by using
 +%   \cs{declare at command@copy at chk@args} to check if the macro being copied
 +%   (\verb=#2=) is a parameterless (\cs{protected}) macro.  If it is not, a
 +%   simple \cs{let} is used to copy the definition and we're done.  This is so
 +%   because the high-level commands that are in the scope of this macro are
 +%   always defined so that the top-level macro doesn't take any argument.  This
 +%   first test is necessary because later on we need to be able to expand the
 +%   \verb=#2= without the risk of it Breaking Badly, and as a bonus, this speeds
 +%   up the process in case we used \cs{NewCommandCopy} in a ``normal'' macro.
 +%
 +%   If \cs{declare at command@copy at chk@args} branched to false, then
 +%   \cs{declare at command@copy at loop} will loop over the list of items in the
 +%   \cs{@declarecommandcopylisthook} token list, and process each item with
 +%   \verb=#1= (the command being defined) and \verb=#2= (the command being
 +%   copied to \verb=#1=).  The token list \cs{@declarecommandcopylisthook}
 +%   should be of the form
 +% \begin{verbatim}
 +%   {\IfTypeCommand \CopyTypeCommand}
 +%   {\IfAnotherCommand \CopyAnotherCommand}
 +%   ...
 +% \end{verbatim}
 +%   where each braced group represents one type of command, and within each
 +%   the first token is a conditional which takes a command as argument, and
 +%   tests that command, branching to true or false.  If this macro branched to
 +%   true, then the second macro is used with the two macros (the one being
 +%   copied to, and the one being copied from) to perform the assignment.
 +%   If none of the tests in the \cs{@declarecommandcopylisthook} token list
 +%   resulted true, then both macros are just \cs{let} to one another.
 +%    \begin{macrocode}
 +\def\declare at command@copy#1#2{%
 +  \expandafter\declare at command@copy at chk@args\meaning#2:->\@nil
 +    {\expandafter\declare at command@copy at loop\expandafter#2%
 +       \@declarecommandcopylisthook{\@nnil\@nnil}%
 +     \@declare at command@end}%
 +    {\declare at command@copy at let}%
 +  #1#2}%
 +\def\declare at command@copy at loop#1#2{\declare at command@copy at loop@aux#1#2}
 +\def\declare at command@copy at loop@aux#1#2#3{%
 +  \ifx\@nnil#2%
 +    \declare at command@copy at do\declare at command@copy at let
 +  \else
 +    #2{#1}%
 +      {\declare at command@copy at do{#3}}%
 +      {\expandafter\declare at command@copy at loop\expandafter#1}%
 +  \fi}
 +\def\declare at command@copy at do#1#2%
 +  \fi#3%
 +  \@declare at command@end#4#5{%
 +  \fi
 +  #1#4#5}
 +\def\declare at command@copy at let#1#2{\let#1=#2\relax}
 +%    \end{macrocode}
 +%
 +%    \begin{macrocode}
 +\def\declare at command@copy at chk@args#1:->#2\@nil{%
 +  \@expl at str@if at eq@@nnTF{#1}{macro}%
 +    {\@firstoftwo}%
 +    {\@expl at str@if at eq@@nnTF{#1}{\protected macro}%
 +      {\@firstoftwo}%
 +      {\@secondoftwo}}}
 +%    \end{macrocode}
 +%
 +%   The initial definition of \cs{@declarecommandcopylisthook} contains the
 +%   tests for the two types of robust command in the kernel.
 +%    \begin{macrocode}
 +\def\@declarecommandcopylisthook{%
 +  {\@if at DeclareRobustCommand \@copy at DeclareRobustCommand}%
 +  {\@if at newcommand \@copy at newcommand}}
 +%    \end{macrocode}
 +%
 +%   Now the rollback code.
 +%    \begin{macrocode}
 +%</2ekernel|latexrelease>
 +%<latexrelease>\EndIncludeInRelease
 +%<latexrelease>\IncludeInRelease{0000-00-00}{\DeclareCommandCopy}
 +%<latexrelease>  {Undefine \NewCommandCopy, \RenewCommandCopy, and \DeclareCommandCopy}%
 +%<latexrelease>\let\NewCommandCopy\@undefined
 +%<latexrelease>\let\RenewCommandCopy\@undefined
 +%<latexrelease>\let\DeclareCommandCopy\@undefined
 +%<latexrelease>\EndIncludeInRelease
 +%<*2ekernel>
 +%    \end{macrocode}
 +% \end{macro}
 +% \end{macro}
 +% \end{macro}
 +% \end{macro}
 +% \end{macro}
 +% \end{macro}
 +% \end{macro}
 +% \end{macro}
 +% \end{macro}
 +% \end{macro}
 +% \end{macro}
 +%
 +%
 +% \begin{macro}{\@if at DeclareRobustCommand}
 +% \begin{macro}{\@copy at DeclareRobustCommand}
 +% \begin{macro}{\copy at kernel@robust at command}
- % \changes{v1.5h}{2020/05/09}{Added \cs{DeclareCommandCopy} (gh/239)}
++% \changes{v1.5j}{2020/05/09}{Added \cs{DeclareCommandCopy} (gh/239)}
 +%
 +%   Now that we provided a generic way to copy one macro to another, we need to
 +%   define a way to check if a command is one of \LaTeXe's robust types.  These
 +%   tests are heavily based on Heiko's \cs{LetLtxMacro}, but chopped into
 +%   separate macros.
 +%
 +%   \cs{@if at DeclareRobustCommand} checks if a command \verb=\cmd= was defined by
 +%   \cs{DeclareRobustCommand}.  The test returns true if the expansion of
 +%   \verb=\cmd= is exactly \verb*=\protect\cmd =.
 +%
 +%    \begin{macrocode}
 +%</2ekernel>
 +%<latexrelease>\IncludeInRelease{2020-10-01}{\@if at DeclareRobustCommand}
 +%<latexrelease>  {Add \@if at DeclareRobustCommand, \@copy at DeclareRobustCommand,
 +%<latexrelease>   \@if at newcommand, and \@copy at newcommand}%
 +%<*2ekernel|latexrelease>
 +%    \end{macrocode}
 +%
 +%    \begin{macrocode}
 +\def\@if at DeclareRobustCommand#1{%
 +  \begingroup
 +    \escapechar=`\\
 +    \edef\reserved at a{\string#1}%
 +    \edef\reserved at b{\detokenize{#1}}%
 +    \xdef\@gtempa{%
 +      \ifx\reserved at a\reserved at b
 +         \noexpand\x at protect
 +         \noexpand#1%
 +      \fi
 +      \noexpand\protect
 +      \expandafter\noexpand\csname\@expl at cs@to at str@@N#1 \endcsname}%
 +  \endgroup
 +  \ifx\@gtempa#1\relax
 +    \expandafter\@firstoftwo
 +  \else
 +    \expandafter\@secondoftwo
 +  \fi}
 +%    \end{macrocode}
 +%
 +%   If a command was defined by \cs{DeclareRobustCommand} (that is,
 +%   \cs{@if at DeclareRobustCommand} returns true), then to make a copy of \verb=\cmd=
 +%   into \verb=\foo= we define the latter such that it expands to
 +%   \verb*=\protect\foo =, then make \verb*=\foo = equal to \verb*=\cmd =.
 +%
 +%   There is one detail we need to take care of:  if a command was defined with
 +%   \cs{DeclareRobustCommand} it may still have an optional argument, in which
 +%   case there is one more macro layer before the actual definition of the
 +%   command.  We use \cs{@if at newcommand} to check that and
 +%   \cs{@copy at newcommand} to do the copying.
 +%    \begin{macrocode}
 +\def\@copy at DeclareRobustCommand#1#2{%
 +  \begingroup
 +    \escapechar=`\\
 +    \edef\reserved at a{\string#1}%
 +    \edef\reserved at b{\detokenize{#1}}%
 +    \edef\reserved at a{%
 +  \endgroup
 +  \def\noexpand#1{%
 +    \ifx\reserved at a\reserved at b
 +       \noexpand\x at protect
 +       \noexpand#1%
 +    \fi
 +    \noexpand\protect
 +    \expandafter\noexpand\csname\@expl at cs@to at str@@N#1 \endcsname}%
 +  \noexpand\copy at kernel@robust at command
 +    \expandafter\noexpand\csname\@expl at cs@to at str@@N#1 \endcsname
 +    \expandafter\noexpand\csname\@expl at cs@to at str@@N#2 \endcsname}%
 +  \reserved at a}
 +\def\copy at kernel@robust at command#1#2{%
 +  \@if at newcommand#2%
 +    {\@copy at newcommand#1#2}%
 +    {\declare at command@copy at let#1#2}}
 +%    \end{macrocode}
 +%
 +% \begin{macro}{\@if at newcommand}
 +% \begin{macro}{\@copy at newcommand}
 +%
 +%   A command \verb=\cmd= (or \verb*=\cmd =, if it was defined with
 +%   \cs{DeclareRobustCommand}) with an optional argument will expand to
 +%   \verb*=\@protected at testopt\cmd\\cmd{<opt>}=.  To check that we look at the
 +%   first three tokens in the expansion of \verb=\cmd=, and return true or false
 +%   accordingly.
 +%    \begin{macrocode}
 +\def\@if at newcommand#1{%
 +  \edef\reserved at a{%
 +    \noexpand\@protected at testopt
 +    \noexpand#1%
 +    \expandafter\noexpand\csname\@backslashchar\@expl at cs@to at str@@N#1\endcsname}%
 +  \edef\reserved at b{%
 +    \unexpanded\expandafter\expandafter\expandafter
 +      {\expandafter\@carcube#1{}{}{}\@nil}}%
 +  \ifx\reserved at a\reserved at b
 +    \expandafter\@firstoftwo
 +  \else
 +    \expandafter\@secondoftwo
 +  \fi}
 +%    \end{macrocode}
 +%
 +%   Then, if a command \verb=\cmd= takes an optional argument, we copy it to
 +%   \verb=\foo= by defining the latter to expand to
 +%   \verb=\@protected at testopt\foo\\foo{<opt>}=.
 +%    \begin{macrocode}
 +\def\@copy at newcommand#1#2{%
 +  \edef#1{\noexpand\@protected at testopt
 +    \noexpand#1%
 +    \expandafter\noexpand\csname\@backslashchar\@expl at cs@to at str@@N#1\endcsname
 +    \unexpanded\expandafter\expandafter\expandafter
 +      {\expandafter\@gobblethree#2}}%
 +  \expandafter
 +  \let\csname\@backslashchar\@expl at cs@to at str@@N#1\expandafter\endcsname
 +      \csname\@backslashchar\@expl at cs@to at str@@N#2\endcsname}
 +%    \end{macrocode}
 +%
 +%   Steal the definition of \textsf{expl3}'s \cs{cs\string_to\string_str:N} for
 +%   a while.  This should disappear as soon as this macro is defined in
 +%   \texttt{ltexpl.dtx} as a copy of \cs{cs\string_to\string_str:N}.
 +%    \begin{macrocode}
 +\def\@expl at cs@to at str@@N{%
 +  \romannumeral\if\string\ \@@expl at cs@to at str@@w\fi
 +  \expandafter\@@expl at cs@to at str@@N\string}
 +\def\@@expl at cs@to at str@@N#1{\z@}
 +\def\@@expl at cs@to at str@@w#1\@@expl at cs@to at str@@N{-\number\fi\expandafter\z@}
 +%    \end{macrocode}
 +%
 +%   Define a poorman's (not expandable) \cs{str\string_if\string_eq:nnTF} for a
 +%   while.  This should disappear as soon as this macro is defined in
 +%   \texttt{ltexpl.dtx} as a copy of \cs{str\string_if\string_eq:nnTF}.
 +%    \begin{macrocode}
 +\def\@expl at str@if at eq@@nnTF#1#2{%
 +  \begingroup
 +    \edef\x{\detokenize{#1}}%
 +    \edef\y{\detokenize{#2}}%
 +  \expandafter\endgroup
 +  \ifx\x\y
 +    \expandafter\@firstoftwo
 +  \else
 +    \expandafter\@secondoftwo
 +  \fi}
 +%    \end{macrocode}
 +%
 +%   Now the rollback code.
 +%    \begin{macrocode}
 +%</2ekernel|latexrelease>
 +%<latexrelease>\EndIncludeInRelease
 +%<latexrelease>\IncludeInRelease{0000-00-00}{\@if at DeclareRobustCommand}
 +%<latexrelease>  {Undefine \@if at DeclareRobustCommand, \@copy at DeclareRobustCommand,
 +%<latexrelease>   \@if at newcommand, and \@copy at newcommand}%
 +%<latexrelease>\let\@if at DeclareRobustCommand\@undefined
 +%<latexrelease>\let\@copy at DeclareRobustCommand\@undefined
 +%<latexrelease>\let\@if at newcommand\@undefined
 +%<latexrelease>\let\@copy at newcommand\@undefined
 +%<latexrelease>\EndIncludeInRelease
 +%<*2ekernel>
 +%    \end{macrocode}
 +% \end{macro}
 +% \end{macro}
 +% \end{macro}
 +% \end{macro}
 +% \end{macro}
  %
 -
  %  \begin{macro}{\kernel at make@fragile}
  %    The opposite of |\MakeRobust| execpt that it doesn't do many
  %    checks as it is internal to the kernel. Why does one want such a
@@@ -1905,6 -1586,7 +1931,7 @@@
  % \changes{v1.0g}{1994/04/12}
  %         {Define \cs{@dischyph}, was previously in ltboxes.dtx}
  % \changes{v1.5b}{2017/03/27}{Define \cs{@dischyph} after \cs{-}}
 -% \changes{v1.5h}{2020/05/11}{Do not overwrite \cs{-} under Lua\TeX}
++% \changes{v1.5j}{2020/05/11}{Do not overwrite \cs{-} under Lua\TeX}
  % \end{macro}
  % Moved here to be after the definition of |\DeclareRobustCommand|.
  %





More information about the latex3-commits mailing list.