Merge branch 'master' into core-updates-frozen
[jackhill/guix/guix.git] / gnu / packages / tex.scm
index b9eeb0e..5da6d8d 100644 (file)
@@ -8,7 +8,7 @@
 ;;; Copyright © 2016 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2017, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Danny Milosavljevic <dannym+a@scratchpost.org>
 ;;; Copyright © 2018, 2020 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2020, 2021 Paul Garlick <pgarlick@tourbillion-technology.com>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Leo Le Bouter <lle-bout@zaclys.net>
+;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
+;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2021 Thiago Jung Bauermann <bauermann@kolabnow.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -36,6 +40,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
@@ -43,6 +48,7 @@
   #:use-module (guix build-system trivial)
   #:use-module (guix build-system texlive)
   #:use-module (guix utils)
+  #:use-module (guix deprecation)
   #:use-module (guix git-download)
   #:use-module (guix svn-download)
   #:use-module (gnu packages)
@@ -119,7 +125,7 @@ copied to their outputs; otherwise the TEXLIVE-BUILD-SYSTEM is used."
                           (string-append doc "/doc")))
                        '())
                  (mkdir-p out)
-                 (copy-recursively (assoc-ref inputs "source") out)
+                 (copy-recursively "." out)
                  ,@(if with-documentation?
                        '((delete-file-recursively (string-append out "/doc")))
                        '())
@@ -148,7 +154,7 @@ copied to their outputs; otherwise the TEXLIVE-BUILD-SYSTEM is used."
                               "-checkout"))
     (sha256
      (base32
-      "0lk7shx768sxvgr85y8bnmmnj8x4bbkgpxrz3z8jp8avi33prw83"))))
+      "04xzf5gr3ylyh3ls09imrx4mwq3qp1k97r9njzlan6hlff875rx2"))))
 
 (define (texlive-hyphen-package name code locations hash)
   "Return a TeX Live hyphenation package with the given NAME, using source
@@ -221,111 +227,101 @@ files from LOCATIONS with expected checksum HASH.  CODE is not currently in use.
 (define texlive-extra-src
   (origin
     (method url-fetch)
-    (uri "ftp://tug.org/historic/systems/texlive/2019/texlive-20190410-extra.tar.xz")
+    (uri "ftp://tug.org/historic/systems/texlive/2021/texlive-20210325-extra.tar.xz")
     (sha256 (base32
-             "13ncf2an4nlqv18lki6y2p6pcsgs1i54zqkhfwprax5j53bk70j8"))))
+             "171kg1n9zapw3d2g47d8l0cywa99bl9m54xkqvp9625ks22z78s6"))))
 
 (define texlive-texmf-src
   (origin
     (method url-fetch)
-    (uri "ftp://tug.org/historic/systems/texlive/2019/texlive-20190410-texmf.tar.xz")
+    (uri "ftp://tug.org/historic/systems/texlive/2021/texlive-20210325-texmf.tar.xz")
     (sha256 (base32
-             "00n4qh9fj8v9zzy3y488hpfq1g3dnnh72y4yjsaikfcqpi59gv62"))))
+             "070gczcm1h9rx29w2f02xd3nhd84c4k28nfmm8qgp69yq8vd84pz"))))
 
 (define-public texlive-bin
   (package
-   (name "texlive-bin")
-   (version "20190410")
-   (source
-    (origin
-      (method url-fetch)
-      (uri (string-append "ftp://tug.org/historic/systems/texlive/2019/"
-                          "texlive-" version "-source.tar.xz"))
-      (sha256
-       (base32
-        "1dfps39q6bdr1zsbp9p74mvalmy3bycihv19sb9c6kg30kprz8nj"))
-      (patches
-       (let ((arch-patch
-              (lambda (name revision hash)
-                (origin
-                  (method url-fetch)
-                  (uri (string-append "https://git.archlinux.org/svntogit/packages.git"
-                                      "/plain/trunk/" name "?h=packages/texlive-bin"
-                                      "&id=" revision))
-                  (file-name (string-append "texlive-bin-" name))
-                  (sha256 (base32 hash)))))
-             (arch-revision "49d7fe25e5ea63f136ebc20270c1d8fc9b00041c"))
-         (list
-          (arch-patch "pdftex-poppler0.76.patch" arch-revision
-                      "03vc88dz37mjjyaspzv0fik2fp5gp8qv82114869akd1dhszbaax")
-          (search-patch "texlive-bin-poppler-0.83.patch")
-          (arch-patch "texlive-poppler-0.84.patch" arch-revision
-                      "1ia6cr99krk4ipx4hdi2qdb98bh2h26mckjlpxdzrjnfhlnghksa")
-          (search-patch "texlive-bin-poppler-0.86.patch"))))
-      (modules '((guix build utils)
-                 (ice-9 ftw)))
-      (snippet
-       '(begin
-          (with-directory-excursion "libs"
-            (let ((preserved-directories '("." ".." "lua53" "luajit")))
-              ;; Delete bundled software, except Lua which cannot easily be
-              ;; used as an external dependency.
-              (for-each delete-file-recursively
-                        (scandir "."
-                                 (lambda (file)
-                                   (and (not (member file preserved-directories))
-                                        (eq? 'directory (stat:type (stat file)))))))))
-          ;; TODO: Unbundle stuff in texk/dvisvgm/dvisvgm-src/libs too.
-          #t))))
-   (build-system gnu-build-system)
-   (inputs
-    `(("texlive-extra-src" ,texlive-extra-src)
-      ("texlive-scripts"
-       ,(origin
-          (method svn-fetch)
-          (uri (svn-reference
-                (url (string-append "svn://www.tug.org/texlive/tags/"
-                                    %texlive-tag "/Master/texmf-dist/"
-                                    "/scripts/texlive"))
-                (revision %texlive-revision)))
-          (file-name (string-append "texlive-scripts-"
-                                    (number->string %texlive-revision)
-                                    "-checkout"))
-          (sha256
-           (base32
-            "1cj04svl8bpfwjr4gqfcc04rmklz3aggrxvgj7q5bxrh7c7g18xh"))))
-      ("cairo" ,cairo)
-      ("fontconfig" ,fontconfig)
-      ("fontforge" ,fontforge)
-      ("freetype" ,freetype)
-      ("gd" ,gd)
-      ("gmp" ,gmp)
-      ("ghostscript" ,ghostscript)
-      ("graphite2" ,graphite2)
-      ("harfbuzz" ,harfbuzz)
-      ("icu4c" ,icu4c)
-      ("libpaper" ,libpaper)
-      ("libpng" ,libpng)
-      ("libxaw" ,libxaw)
-      ("libxt" ,libxt)
-      ("mpfr" ,mpfr)
-      ("perl" ,perl)
-      ("pixman" ,pixman)
-      ("poppler" ,poppler)
-      ("potrace" ,potrace)
-      ("python" ,python-2) ; incompatible with Python 3 (print syntax)
-      ("ruby" ,ruby)
-      ("tcsh" ,tcsh)
-      ("teckit" ,teckit)
-      ("zlib" ,zlib)
-      ("zziplib" ,zziplib)))
-   (native-inputs
-    `(("pkg-config" ,pkg-config)))
-   (arguments
-    `(#:out-of-source? #t
-      #:configure-flags
+    (name "texlive-bin")
+    (version "20210325")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "ftp://tug.org/historic/systems/texlive/2021/"
+                           "texlive-" version "-source.tar.xz"))
+       (sha256
+        (base32
+         "0jsq1p66l46k2qq0gbqmx25flj2nprsz4wrd1ybn286p11kdkvvs"))
+       (modules '((guix build utils)
+                  (ice-9 ftw)))
+       (snippet
+        '(begin
+           (with-directory-excursion "libs"
+             (let ((preserved-directories '("." ".." "lua53" "luajit" "pplib" "xpdf")))
+               ;; Delete bundled software, except Lua which cannot easily be
+               ;; used as an external dependency, pplib and xpdf which aren't
+               ;; supported as system libraries (see m4/kpse-xpdf-flags.m4).
+               (for-each delete-file-recursively
+                         (scandir "."
+                                  (lambda (file)
+                                    (and (not (member file preserved-directories))
+                                         (eq? 'directory (stat:type (stat file)))))))))
+           ;; TODO: Unbundle stuff in texk/dvisvgm/dvisvgm-src/libs too.
+           #t))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("texlive-extra-src" ,texlive-extra-src)
+       ("config" ,config)
+       ("texlive-scripts"
+        ,(origin
+           (method svn-fetch)
+           (uri (svn-reference
+                 (url (string-append "svn://www.tug.org/texlive/tags/"
+                                     %texlive-tag "/Master/texmf-dist/"
+                                     "/scripts/texlive"))
+                 (revision %texlive-revision)))
+           (file-name (string-append "texlive-scripts-"
+                                     (number->string %texlive-revision)
+                                     "-checkout"))
+           (sha256
+            (base32
+             "10xpa4nnz1biap7qfv7fb0zk6132ki5g1j8w0bqwkggfncdfl07d"))))
+       ("cairo" ,cairo)
+       ("fontconfig" ,fontconfig)
+       ("fontforge" ,fontforge)
+       ("freetype" ,freetype)
+       ("gd" ,gd)
+       ("gmp" ,gmp)
+       ("ghostscript" ,ghostscript)
+       ("graphite2" ,graphite2)
+       ("harfbuzz" ,harfbuzz)
+       ("icu4c" ,icu4c)
+       ("libpaper" ,libpaper)
+       ("libpng" ,libpng)
+       ("libxaw" ,libxaw)
+       ("libxt" ,libxt)
+       ("mpfr" ,mpfr)
+       ("perl" ,perl)
+       ("pixman" ,pixman)
+       ("potrace" ,potrace)
+       ("python" ,python)
+       ("ruby" ,ruby)
+       ("tcsh" ,tcsh)
+       ("teckit" ,teckit)
+       ("zlib" ,zlib)
+       ("zziplib" ,zziplib)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (arguments
+     `(#:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (ice-9 ftw)
+                  (srfi srfi-1)
+                  (srfi srfi-26))
+       #:out-of-source? #t
+       #:configure-flags
        '("--disable-static"
          "--disable-native-texlive-build"
+         "--enable-shared"
+         "--with-banner-add=/GNU Guix"
          "--with-system-cairo"
          "--with-system-freetype2"
          "--with-system-gd"
@@ -338,16 +334,15 @@ files from LOCATIONS with expected checksum HASH.  CODE is not currently in use.
          "--with-system-libpng"
          "--with-system-mpfr"
          "--with-system-pixman"
-         "--with-system-poppler"
          "--with-system-potrace"
          "--with-system-teckit"
-         "--with-system-xpdf"
          "--with-system-zlib"
          "--with-system-zziplib"
          ;; LuaJIT is not ported to powerpc64le* yet.
          ,@(if (string-prefix? "powerpc64le" (or (%current-target-system)
                                                  (%current-system)))
                '("--disable-luajittex"
+                 "--disable-luajithbtex"
                  "--disable-mfluajit")
                '()))
 
@@ -360,102 +355,226 @@ files from LOCATIONS with expected checksum HASH.  CODE is not currently in use.
                            (string-prefix? "mips64" s)
                            (string-prefix? "powerpc64le" s))))
 
-      #:phases
-      (modify-phases %standard-phases
-        (add-after 'unpack 'configure-ghostscript-executable
-          ;; ps2eps.pl uses the "gswin32c" ghostscript executable on Windows,
-          ;; and the "gs" ghostscript executable on Unix. It detects Unix by
-          ;; checking for the existence of the /usr/bin directory. Since
-          ;; Guix System does not have /usr/bin, it is also detected as Windows.
-          (lambda* (#:key inputs #:allow-other-keys)
-            (substitute* "utils/ps2eps/ps2eps-src/bin/ps2eps.pl"
-              (("gswin32c") "gs"))
-            (substitute* "texk/texlive/linked_scripts/epstopdf/epstopdf.pl"
-              (("\"gs\"")
-               (string-append "\"" (assoc-ref inputs "ghostscript") "/bin/gs\"")))
-            #t))
-        (add-after 'unpack 'use-code-for-new-poppler
-          (lambda _
-            (copy-file "texk/web2c/pdftexdir/pdftoepdf-poppler0.76.0.cc"
-                       "texk/web2c/pdftexdir/pdftoepdf.cc")
-            (copy-file "texk/web2c/pdftexdir/pdftosrc-poppler0.76.0.cc"
-                       "texk/web2c/pdftexdir/pdftosrc.cc")
-            #t))
-        (add-after 'unpack 'patch-dvisvgm-build-files
-          (lambda _
-            ;; XXX: Ghostscript is detected, but HAVE_LIBGS is never set, so
-            ;; the appropriate linker flags are not added.
-            (substitute* "texk/dvisvgm/configure"
-              (("^have_libgs=yes" all)
-               (string-append all "\nHAVE_LIBGS=1")))
-            #t))
-        (add-after 'unpack 'disable-failing-test
-          (lambda _
-            ;; FIXME: This test fails on 32-bit architectures since Glibc 2.28:
-            ;; <https://bugzilla.redhat.com/show_bug.cgi?id=1631847>.
-            (substitute* "texk/web2c/omegafonts/check.test"
-              (("^\\./omfonts -ofm2opl \\$srcdir/tests/check tests/xcheck \\|\\| exit 1")
-               "./omfonts -ofm2opl $srcdir/tests/check tests/xcheck || exit 77"))
-            #t))
-        (add-after 'install 'postint
-          (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
-            (let* ((out (assoc-ref outputs "out"))
-                   (share (string-append out "/share"))
-                   (texlive-extra (assoc-ref inputs "texlive-extra-src"))
-                   (unpack (assoc-ref %standard-phases 'unpack))
-                   (patch-source-shebangs
-                    (assoc-ref %standard-phases 'patch-source-shebangs)))
-              (substitute* (string-append share "/texmf-dist/web2c/texmf.cnf")
-                ;; Don't truncate lines.
-                (("^error_line = .*$") "error_line = 254\n")
-                (("^half_error_line = .*$") "half_error_line = 238\n")
-                (("^max_print_line = .*$") "max_print_line = 1000\n"))
-              ;; Create symbolic links for the latex variants and their
-              ;; man pages.
-              (with-directory-excursion (string-append out "/bin/")
-                (for-each symlink
-                          '("pdftex" "pdftex"   "xetex"   "luatex")
-                          '("latex"  "pdflatex" "xelatex" "lualatex")))
-              (with-directory-excursion (string-append share "/man/man1/")
-                (symlink "luatex.1" "lualatex.1"))
-              ;; Unpack texlive-extra and install tlpkg.
-              (mkdir "texlive-extra")
-              (with-directory-excursion "texlive-extra"
-                (apply unpack (list #:source texlive-extra))
-                (apply patch-source-shebangs (list #:source texlive-extra))
-                (invoke "mv" "tlpkg" share))
-              (let ((scripts (string-append share "/texmf-dist/scripts/texlive/")))
-                (mkdir-p scripts)
-                (copy-recursively (assoc-ref inputs "texlive-scripts") scripts)
-                ;; Make sure that fmtutil can find its Perl modules.
-                (substitute* (string-append scripts "fmtutil.pl")
-                  (("\\$TEXMFROOT/") (string-append share "/"))))
-
-              ;; texlua shebangs are not patched by the patch-source-shebangs
-              ;; phase because the texlua executable does not exist at that
-              ;; time.
-              (setenv "PATH" (string-append (getenv "PATH") ":" out "/bin"))
-              (with-directory-excursion out
-                (patch-source-shebangs))))))))
-   (native-search-paths
-    (list (search-path-specification
-           (variable "TEXMF")
-           (files '("share/texmf-dist"))
-           (separator #f))
-          (search-path-specification
-           (variable "TEXMFCNF")
-           (files '("share/texmf-dist/web2c"))
-           (separator #f))))
-   (synopsis "TeX Live, a package of the TeX typesetting system")
-   (description
-    "TeX Live provides a comprehensive TeX document production system.
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'configure-ghostscript-executable
+           ;; ps2eps.pl uses the "gswin32c" ghostscript executable on Windows,
+           ;; and the "gs" ghostscript executable on Unix. It detects Unix by
+           ;; checking for the existence of the /usr/bin directory. Since
+           ;; Guix System does not have /usr/bin, it is also detected as Windows.
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "utils/ps2eps/ps2eps-src/bin/ps2eps.pl"
+               (("gswin32c") "gs"))
+             (substitute* "texk/texlive/linked_scripts/epstopdf/epstopdf.pl"
+               (("\"gs\"")
+                (string-append "\"" (assoc-ref inputs "ghostscript") "/bin/gs\"")))
+             #t))
+         (add-after 'unpack 'patch-dvisvgm-build-files
+           (lambda _
+             ;; XXX: Ghostscript is detected, but HAVE_LIBGS is never set, so
+             ;; the appropriate linker flags are not added.
+             (substitute* "texk/dvisvgm/configure"
+               (("^have_libgs=yes" all)
+                (string-append all "\nHAVE_LIBGS=1")))
+             #t))
+         (add-after 'unpack 'disable-failing-test
+           (lambda _
+             ;; FIXME: This test fails on 32-bit architectures since Glibc 2.28:
+             ;; <https://bugzilla.redhat.com/show_bug.cgi?id=1631847>.
+             (substitute* "texk/web2c/omegafonts/check.test"
+               (("^\\./omfonts -ofm2opl \\$srcdir/tests/check tests/xcheck \\|\\| exit 1")
+                "./omfonts -ofm2opl $srcdir/tests/check tests/xcheck || exit 77"))
+             #t))
+         ,@(if (target-ppc32?)
+             ;; Some mendex tests fail on some architectures.
+             `((add-after 'unpack 'skip-mendex-tests
+                 (lambda _
+                   (substitute* '("texk/mendexk/tests/mendex.test"
+                                  "texk/upmendex/tests/upmendex.test")
+                     (("srcdir/tests/pprecA-0.ind pprecA-0.ind1 \\|\\| exit 1")
+                      "srcdir/tests/pprecA-0.ind pprecA-0.ind1 || exit 77")))))
+             '())
+         (add-after 'unpack 'unpack-texlive-extra
+           (lambda* (#:key inputs #:allow-other-keys)
+             (mkdir "texlive-extra")
+             (with-directory-excursion "texlive-extra"
+               (apply (assoc-ref %standard-phases 'unpack)
+                      (list #:source (assoc-ref inputs "texlive-extra-src"))))))
+         (add-after 'unpack-texlive-extra 'unpack-texlive-scripts
+           (lambda* (#:key inputs #:allow-other-keys)
+             (mkdir "texlive-scripts")
+             (with-directory-excursion "texlive-scripts"
+               (apply (assoc-ref %standard-phases 'unpack)
+                      (list #:source (assoc-ref inputs "texlive-scripts"))))))
+         (add-after 'unpack-texlive-scripts 'patch-scripts
+           (lambda _
+             (let* ((scripts (append (find-files "texk/kpathsea" "^mktex")
+                                     (find-files "texk/texlive/linked_scripts"
+                                                 "\\.sh$")
+                                     (find-files "texlive-scripts" "\\.sh$")))
+                    (commands '("awk" "basename" "cat" "grep" "mkdir" "rm"
+                                "sed" "sort" "uname"))
+                    (command-regexp (format #f "\\b(~a)\\b"
+                                            (string-join commands "|")))
+                    (iso-8859-1-encoded-scripts
+                     '("texk/texlive/linked_scripts/texlive-extra/rubibtex.sh"
+                       "texk/texlive/linked_scripts/texlive-extra/rumakeindex.sh")))
+
+               (define (substitute-commands scripts)
+                 (substitute* scripts
+                   ((command-regexp dummy command)
+                    (which command))))
+
+               (substitute-commands (lset-difference string= scripts
+                                                     iso-8859-1-encoded-scripts))
+
+               (with-fluids ((%default-port-encoding "ISO-8859-1"))
+                 (substitute-commands iso-8859-1-encoded-scripts))
+
+               #t)))
+         (add-after 'check 'customize-texmf.cnf
+           ;; The default texmf.cnf is provided by this package, texlive-bin.
+           ;; Every variable of interest is set relatively to the GUIX_TEXMF
+           ;; environment variable defined via a search path specification
+           ;; further below.  The configuration file is patched after the test
+           ;; suite has run, as it relies on the default configuration to find
+           ;; its paths (and the GUIX_TEXMF variable isn't set yet).
+           (lambda _
+             ;; The current directory is build/ because of the out-of-tree
+             ;; build.
+             (let* ((source    (first (scandir ".." (cut string-suffix?
+                                                         "source" <>))))
+                    (texmf.cnf (string-append "../" source
+                                              "/texk/kpathsea/texmf.cnf")))
+               (substitute* texmf.cnf
+                 (("^TEXMFROOT = .*")
+                  "TEXMFROOT = {$GUIX_TEXMF}/..\n")
+                 (("^TEXMF = .*")
+                  "TEXMF = {$GUIX_TEXMF}\n")
+                 (("^%TEXMFCNF = .*")
+                  "TEXMFCNF = {$GUIX_TEXMF}/web2c\n")
+                 ;; Don't truncate lines.
+                 (("^error_line = .*$") "error_line = 254\n")
+                 (("^half_error_line = .*$") "half_error_line = 238\n")
+                 (("^max_print_line = .*$") "max_print_line = 1000\n")))
+             #t))
+         (add-after 'install 'post-install
+           (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
+             (let* ((out (assoc-ref outputs "out"))
+                    (patch-source-shebangs (assoc-ref %standard-phases
+                                                      'patch-source-shebangs))
+                    (share (string-append out "/share"))
+                    (scripts (string-append share
+                                            "/texmf-dist/scripts/texlive"))
+                    (source (string-append
+                             "../" (first (scandir ".." (cut string-suffix?
+                                                             "source" <>)))))
+                    (tl-extra-root (string-append source "/texlive-extra"))
+                    (tl-extra-dir (first
+                                   (scandir tl-extra-root
+                                            (negate
+                                             (cut member <> '("." ".."))))))
+                    (tlpkg-src (string-append tl-extra-root "/" tl-extra-dir
+                                              "/tlpkg"))
+                    (config.guess (search-input-file inputs
+                                                     "/bin/config.guess")))
+
+               ;; Create symbolic links for the latex variants and their
+               ;; man pages.
+               (with-directory-excursion (string-append out "/bin/")
+                 (for-each symlink
+                           '("pdftex" "pdftex"   "xetex"   "luatex")
+                           '("latex"  "pdflatex" "xelatex" "lualatex")))
+               (with-directory-excursion (string-append share "/man/man1/")
+                 (symlink "luatex.1" "lualatex.1"))
+
+               ;; Install tlpkg.
+               (copy-recursively tlpkg-src (string-append share "/tlpkg"))
+
+               ;; Install texlive-scripts.
+               (copy-recursively (string-append
+                                  source "/texlive-scripts/source/")
+                                 scripts)
+
+               ;; Make sure that fmtutil can find its Perl modules.
+               (substitute* (string-append scripts "/fmtutil.pl")
+                 (("\\$TEXMFROOT/")
+                  (string-append share "/")))
+
+               ;; Likewise for updmap.pl.
+               (substitute* (string-append scripts "/updmap.pl")
+                 (("\\$TEXMFROOT/tlpkg")
+                  (string-append share "/tlpkg")))
+
+               ;; Likewise for the tlmgr.
+               (substitute* (string-append scripts "/tlmgr.pl")
+                 ((".*\\$::installerdir = \\$Master.*" all)
+                  (format #f "  $Master = ~s;~%~a" share all)))
+
+               ;; Install the config.guess script, required by tlmgr.
+               (with-directory-excursion share
+                 (mkdir-p "tlpkg/installer/")
+                 (symlink config.guess "tlpkg/installer/config.guess"))
+
+               ;; texlua shebangs are not patched by the patch-source-shebangs
+               ;; phase because the texlua executable does not exist at that
+               ;; time.
+               (setenv "PATH" (string-append (getenv "PATH") ":" out "/bin"))
+               (with-directory-excursion out
+                 (patch-source-shebangs))))))))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "GUIX_TEXMF")
+            (files '("share/texmf-dist")))))
+    (synopsis "TeX Live, a package of the TeX typesetting system")
+    (description
+     "TeX Live provides a comprehensive TeX document production system.
 It includes all the major TeX-related programs, macro packages, and fonts
 that are free software, including support for many languages around the
 world.
 
 This package contains the binaries.")
-   (license (license:fsf-free "https://www.tug.org/texlive/copying.html"))
-   (home-page "https://www.tug.org/texlive/")))
+    (license (license:fsf-free "https://www.tug.org/texlive/copying.html"))
+    (home-page "https://www.tug.org/texlive/")))
+
+(define-public texlive-libkpathsea
+  (package/inherit texlive-bin
+    (name "texlive-libkpathsea")
+    (source
+     (origin
+       (inherit (package-source texlive-bin))
+       (snippet
+        `(begin
+           ,(origin-snippet (package-source texlive-bin))
+           (with-directory-excursion "texk"
+             (let ((preserved-directories '("." ".." "kpathsea")))
+               (for-each
+                delete-file-recursively
+                (scandir "."
+                         (lambda (file)
+                           (and (not (member file preserved-directories))
+                                (eq? 'directory (stat:type (stat file)))))))))))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments texlive-bin)
+       ((#:configure-flags flags)
+        `(cons* "--disable-all-pkgs" "--enable-kpathsea"
+                "--enable-shared" ,flags))
+       ((#:phases phases)
+        `(modify-phases %standard-phases
+           (add-after 'install 'post-install
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (with-directory-excursion "texk/kpathsea"
+                 (invoke "make" "install"))))))))
+    (inputs '())
+    (synopsis "Path searching library")
+    (description "kpathsea is a library, whose purpose is to return a filename
+from a list of user-specified directories similar to how shells look up
+executables.  It is maintained as a part of TeX Live.")))
+
+(define-syntax-rule (define-deprecated-package old-name name)
+  "Define OLD-NAME as a deprecated package alias for NAME."
+  (define-deprecated/public old-name name
+    (deprecated-package (symbol->string 'old-name) name)))
 
 \f
 (define texlive-docstrip
@@ -464,7 +583,7 @@ This package contains the binaries.")
               "texlive-docstrip"
               (list "/tex/latex/base/docstrip.tex")
               (base32
-               "1f9sx1lp7v34zwm186msf03q2h28rrg0lh65z59zc0cvqffs6dvb")
+               "1pxbqbia0727vg01xv8451szm55z2w8sb0vv3kf4iqx5ibb6m0d2")
               #:trivial? #t))
     (home-page "https://www.ctan.org/texlive")
     (synopsis "Utility to strip documentation from TeX files.")
@@ -479,7 +598,7 @@ documentation from TeX files.  It is part of the LaTeX base.")
               (list "/tex/generic/unicode-data/"
                     "/doc/generic/unicode-data/")
               (base32
-               "0zy4v9y667cka5fi4dnc6x500907812y7pcaf63s5qxi8l7khxxy")
+               "1d41zvjsig7sqf2j2m89dnbv3gicpb16r04b4ikps4gabhbky83k")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/unicode-data")
     (synopsis "Unicode data and loaders for TeX")
@@ -494,8 +613,7 @@ set up and one for initializing XeTeX character classes as has been carried
 out to date by @code{unicode-letters.tex}. ")
     (license license:lppl1.3c+)))
 
-(define-public texlive-generic-unicode-data
-  (deprecated-package "texlive-generic-unicode-data" texlive-unicode-data))
+(define-deprecated-package texlive-generic-unicode-data texlive-unicode-data)
 
 (define-public texlive-hyphen-base
   (package
@@ -512,7 +630,7 @@ out to date by @code{unicode-letters.tex}. ")
                     "/tex/generic/hyphen/hypht1.tex"
                     "/tex/generic/hyphen/zerohyph.tex")
               (base32
-               "0f19nml4hdx9lh7accqdk1b9ismwfm2523l5zsc4kb4arysgcakz")
+               "1sagn9aybs34m1s6m3zwya5g5kbiwfnw8ifcgxssygmzzs88dgjp")
               #:trivial? #t))
     (home-page "https://tug.org/texlive/")
     (synopsis "Core hyphenation support files")
@@ -533,7 +651,7 @@ default versions of those), etc.")
                     "/fonts/enc/dvips/base/"
                     "/tex/generic/dvips/")
               (base32
-               "1qr7h0ahycmz5wmpv54glfss9jqdmmyymj6kim626d1c8v9bmg86")
+               "0rns1hpjy4fmsskmkwx197j8qbgdmyj0j9214sq9vhpa6nv7czm3")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/dvips")
     (synopsis "DVI to PostScript drivers")
@@ -558,24 +676,24 @@ allow existing format source files to be used with newer engines, for example
 to adapt the plain e-TeX source file to work with XeTeX and LuaTeX.")
     (license license:public-domain)))
 
-(define-public texlive-generic-tex-ini-files
-  (deprecated-package "texlive-generic-tex-ini-files" texlive-tex-ini-files))
+(define-deprecated-package texlive-generic-tex-ini-files texlive-tex-ini-files)
 
-(define-public texlive-metafont-base
+(define-public texlive-metafont
   (package
-    (name "texlive-metafont-base")
+    (name "texlive-metafont")
     (version (number->string %texlive-revision))
     (source (origin
-              (method svn-fetch)
-              (uri (svn-reference
+              (method svn-multi-fetch)
+              (uri (svn-multi-reference
                     (url (string-append "svn://www.tug.org/texlive/tags/"
-                                        %texlive-tag "/Master/texmf-dist/"
-                                        "/metafont"))
+                                        %texlive-tag "/Master/texmf-dist"))
+                    (locations '("/metafont/"
+                                 "/fonts/source/public/modes/"))
                     (revision %texlive-revision)))
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1yl4n8cn5xqk2nc22zgzq6ymd7bhm6xx1mz3azip7i3ki4bhb5q5"))))
+                "17y72xmz5a36vdsq7pfrwj0j4c7llrm9j5kcq349cpaas7r32lmb"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; no test target
@@ -584,14 +702,17 @@ to adapt the plain e-TeX source file to work with XeTeX and LuaTeX.")
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((cwd (getcwd)))
+             (let* ((cwd (getcwd))
+                    (mf (string-append cwd "/metafont"))
+                    (modes (string-append cwd "/fonts/source/public/modes")))
                (setenv "MFINPUTS"
-                       (string-append cwd "/base:"
-                                      cwd "/misc:"
-                                      cwd "/roex:"
-                                      cwd "/feynmf:"
-                                      cwd "/mfpic:"
-                                      cwd "/config")))
+                       (string-append modes ":"
+                                      mf "/base:"
+                                      mf "/misc:"
+                                      mf "/roex:"
+                                      mf "/feynmf:"
+                                      mf "/mfpic:"
+                                      mf "/config")))
              (mkdir "build")
              (with-directory-excursion "build"
                (invoke "inimf" "mf.mf"))))
@@ -599,12 +720,14 @@ to adapt the plain e-TeX source file to work with XeTeX and LuaTeX.")
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out  (assoc-ref outputs "out"))
                     (base (string-append out "/share/texmf-dist/web2c"))
-                    (mf   (string-append out "/share/texmf-dist/metafont/base")))
+                    (mf   (string-append out "/share/texmf-dist/metafont/")))
                (mkdir-p base)
                (mkdir-p mf)
                (install-file "build/mf.base" base)
-               (copy-recursively "base" mf)
-               #t))))))
+               (with-directory-excursion "metafont"
+                 (for-each (lambda (where)
+                             (copy-recursively where (string-append mf where)))
+                           (list "base" "misc" "config")))))))))
     (native-inputs
      `(("texlive-bin" ,texlive-bin)))
     (home-page "https://www.ctan.org/pkg/metafont")
@@ -613,6 +736,8 @@ to adapt the plain e-TeX source file to work with XeTeX and LuaTeX.")
 build fonts using the Metafont system.")
     (license license:knuth)))
 
+(define-deprecated-package texlive-metafont-base texlive-metafont)
+
 (define-public texlive-fontinst
   (let ((template (simple-texlive-package
                    "texlive-fontinst"
@@ -637,11 +762,9 @@ build fonts using the Metafont system.")
                          "/tex/fontinst/latinetx/"
                          "/tex/fontinst/latinmtx/"
                          "/tex/fontinst/mathmtx/"
-                         "/tex/fontinst/smblmtx/"
-
-                         "/scripts/texlive/fontinst.sh")
+                         "/tex/fontinst/smblmtx/")
                    (base32
-                    "0lprwib7n2ygfxvrw675vhif7ghyip2x6k70kqs9syp8lqxiizf8")
+                    "195jsijrpv828pqy99gm13j31nsc8bsa58zlbln2r0h5j9l44b5g")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -703,8 +826,7 @@ metrics (and related information) for a font family that TeX needs to do any
 typesetting in these fonts.")
       (license license:lppl1.1+))))
 
-(define-public texlive-tex-fontinst-base
-  (deprecated-package "texlive-tex-fontinst-base" texlive-fontinst))
+(define-deprecated-package texlive-tex-fontinst-base texlive-fontinst)
 
 (define-public texlive-fontname
   (package
@@ -713,7 +835,7 @@ typesetting in these fonts.")
               (list "/doc/fonts/fontname/fontname.texi"
                     "/fonts/map/fontname/")
               (base32
-               "0h5im5rnhycrrkd6z10f17m2caa8lv594wf482b68qjmnxfrqnxj")
+               "009qvjpw48lajp0gxpvdk10n5qw3q41cpq05ycns67mxwkcaywq6")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/fontname")
     (synopsis "Scheme for naming fonts in TeX")
@@ -730,7 +852,7 @@ documents.")
                          "/fonts/map/dvips/cm/cmtext-bsr-interpolated.map"
                          "/doc/fonts/cm/")
                    (base32
-                    "09mvl94qrwlb9b4pkigi151l256v3djhwl4m5lgvk6yhn5y75zrp")
+                    "1ky4gvcn8qn3d61bvb39512b8r92igv6il7vh02hw04223yj6q8i")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -744,7 +866,7 @@ documents.")
           `(modify-phases ,phases
              (replace 'build
                (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+                 (let ((mf (assoc-ref inputs "texlive-metafont")))
                    ;; Tell mf where to find mf.base
                    (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                    ;; Tell mf where to look for source files
@@ -788,7 +910,7 @@ documents.")
                    #t)))))))
       (native-inputs
        `(("texlive-bin" ,texlive-bin)
-         ("texlive-metafont-base" ,texlive-metafont-base)))
+         ("texlive-metafont" ,texlive-metafont)))
       (home-page "https://www.ctan.org/pkg/cm")
       (synopsis "Computer Modern fonts for TeX")
       (description "This package provides the Computer Modern fonts by Donald
@@ -797,8 +919,7 @@ display, and mathematical fonts in a range of styles, based on Monotype Modern
 8A.")
       (license license:knuth))))
 
-(define-public texlive-fonts-cm
-  (deprecated-package "texlive-fonts-cm" texlive-cm))
+(define-deprecated-package texlive-fonts-cm texlive-cm)
 
 (define-public texlive-cm-super
   (let ((template (simple-texlive-package
@@ -832,8 +953,7 @@ originals.")
       ;; With font exception
       (license license:gpl2+))))
 
-(define-public texlive-fonts-cm-super
-  (deprecated-package "texlive-fonts-cm-super" texlive-cm-super))
+(define-deprecated-package texlive-fonts-cm-super texlive-cm-super)
 
 (define-public texlive-courier
   (package
@@ -853,7 +973,7 @@ originals.")
                     "/tex4ht/ht-fonts/alias/adobe/courier/"
                     "/tex4ht/ht-fonts/unicode/adobe/courier/")
               (base32
-               "1hfgisdi7mjf5156ax6d6zsbiq42zkmp1x5lg17rgzf61k6d6z1y")
+               "05lglavi073glj26k9966351hka5ac22g4vim61dkfy001vz4i7r")
               #:trivial? #t))
     (home-page "https://ctan.org/pkg/urw-base35")
     (synopsis "URW Base 35 font pack for LaTeX")
@@ -862,6 +982,45 @@ font from Adobe's basic set.")
     ;; No license version specified.
     (license license:gpl3+)))
 
+(define-public texlive-tex-gyre
+  (package
+    (inherit (simple-texlive-package
+              "texlive-tex-gyre"
+              '("/doc/fonts/tex-gyre/GUST-FONT-LICENSE.txt"
+                "/fonts/afm/public/tex-gyre/"
+                "/fonts/enc/dvips/tex-gyre/"
+                "/fonts/map/dvips/tex-gyre/"
+                "/fonts/opentype/public/tex-gyre/"
+                "/fonts/tfm/public/tex-gyre/"
+                "/fonts/type1/public/tex-gyre/"
+                "/tex/latex/tex-gyre/")
+              (base32
+               "1ldnlmclghm3gnyv02r8a6cqybygz2ifq07mhykhf43h1pw3aq7k")
+              #:trivial? #t))
+    (home-page "https://ctan.org/pkg/tex-gyre")
+    (synopsis "TeX fonts extending URW fonts")
+    (description
+     "The TeX-GYRE bundle consist of multiple font families:
+@itemize @bullet
+@item Adventor, based on the URW Gothic L family of fonts;
+@item Bonum, based on the URW Bookman L family;
+@item Chorus, based on URW Chancery L Medium Italic;
+@item Cursor, based on URW Nimbus Mono L;
+@item Heros, based on URW Nimbus Sans L;
+@item Pagella, based on URW Palladio L;
+@item Schola, based on the URW Century Schoolbook L family;
+@item Termes, based on the URW Nimbus Roman No9 L family of fonts.
+@end itemize
+
+The constituent standard faces of each family have been greatly extended
+(though Chorus omits Greek support and has no small-caps family).  Each
+family is available in Adobe Type 1 and Open Type formats, and LaTeX
+support (for use with a variety of encodings) is provided.")
+    ;; The GUST font license (GFL) is legally identical to the LaTeX Project
+    ;; Public License (LPPL), version 1.3c or later, but comes with an
+    ;; additional but not legally binding clause.
+    (license license:lppl1.3c+)))
+
 (define-public texlive-lm
   (package
     (inherit (simple-texlive-package
@@ -876,7 +1035,7 @@ font from Adobe's basic set.")
                     "/fonts/type1/public/lm/"
                     "/tex/latex/lm/")
               (base32
-               "0i1hwr8rp0jqyvs4qyplrirscd4w7lsgwsncyv3yzy80bsa56jq5")
+               "0yyk0dr4yms82mwy4dc03zf5igyhgcb65icdah042rk23rlpxygv")
               #:trivial? #t))
     (home-page "http://www.gust.org.pl/projects/e-foundry/latin-modern/")
     (synopsis "Latin Modern family of fonts")
@@ -888,76 +1047,70 @@ Computers & Typesetting series.")
     ;; additional but not legally binding clause.
     (license license:lppl1.3c+)))
 
-(define-public texlive-fonts-lm
-  (deprecated-package "texlive-fonts-lm" texlive-lm))
+(define-deprecated-package texlive-fonts-lm texlive-lm)
 
-(define-public texlive-fonts-knuth-lib
-  (package
-    (name "texlive-fonts-knuth-lib")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (svn-reference
-                    (url (string-append "svn://www.tug.org/texlive/tags/"
-                                        %texlive-tag "/Master/texmf-dist/"
-                                        "/fonts/source/public/knuth-lib"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0in9aqyi8jkyf9d16z0li50z5fpwj1iwgwm83gmvwqcf7chfs04y"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (srfi srfi-26))
-       #:tests? #f ; no tests
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (replace 'build
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((mf (assoc-ref inputs "texlive-metafont-base")))
-               ;; Tell mf where to find mf.base
-               (setenv "MFBASES"
-                       (string-append mf "/share/texmf-dist/web2c"))
-               ;; Tell mf where to look for source files
-               (setenv "MFINPUTS"
-                       (string-append (getcwd) ":"
-                                      mf "/share/texmf-dist/metafont/base")))
-             (mkdir "build")
-             (for-each (lambda (font)
-                         (format #t "building font ~a\n" font)
-                         (invoke "mf" "-progname=mf"
-                                 "-output-directory=build"
-                                 (string-append "\\"
-                                                "mode:=ljfour; "
-                                                "mag:=1; "
-                                                "batchmode; "
-                                                "input " font)))
-                       (find-files "." "(manfnt|logo.+)\\.mf$"))
-             #t))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (tfm (string-append
-                          out "/share/texmf-dist/fonts/tfm/public/knuth-lib"))
-                    (mf  (string-append
-                          out "/share/texmf-dist/fonts/source/public/knuth-lib")))
-               (for-each (cut install-file <> tfm)
-                         (find-files "build" "\\.*"))
-               (for-each (cut install-file <> mf)
-                         (find-files "." "\\.mf"))
-               #t))))))
-    (native-inputs
-     `(("texlive-bin" ,texlive-bin)
-       ("texlive-metafont-base" ,texlive-metafont-base)))
-    (home-page "https://www.ctan.org/pkg/knuth-lib")
-    (synopsis "Small library of METAFONT sources")
-    (description "This is a collection of core TeX and METAFONT macro files
+(define-public texlive-knuth-lib
+  (let ((template (simple-texlive-package
+                   "texlive-knuth-lib"
+                   (list "/fonts/source/public/knuth-lib/"
+                         "/tex/generic/knuth-lib/"
+                         "/tex/plain/knuth-lib/")
+                   (base32
+                    "1cxyqqprp8sj2j4zp9l0wry8cq2awpz3a8i5alzpc4ndg7a6pgdf")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:modules _ '())
+          '((guix build gnu-build-system)
+            (guix build utils)
+            (srfi srfi-26)))
+         ((#:phases phases '())
+          `(modify-phases ,phases
+             (replace 'build
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (with-directory-excursion "fonts/source/public/knuth-lib"
+                   (let ((mf (assoc-ref inputs "texlive-metafont")))
+                     ;; Tell mf where to find mf.base
+                     (setenv "MFBASES"
+                             (string-append mf "/share/texmf-dist/web2c"))
+                     ;; Tell mf where to look for source files
+                     (setenv "MFINPUTS"
+                             (string-append (getcwd) ":"
+                                            mf "/share/texmf-dist/metafont/base")))
+                   (mkdir "build")
+                   (for-each (lambda (font)
+                               (format #t "building font ~a\n" font)
+                               (invoke "mf" "-progname=mf"
+                                       "-output-directory=build"
+                                       (string-append "\\"
+                                                      "mode:=ljfour; "
+                                                      "mag:=1; "
+                                                      "batchmode; "
+                                                      "input " font)))
+                             (find-files "." "(manfnt|logo.+)\\.mf$")))
+                 #t))
+             (add-after 'install 'install-fonts
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (with-directory-excursion "fonts/source/public/knuth-lib"
+                   (let* ((out (assoc-ref outputs "out"))
+                          (tfm (string-append
+                                out "/share/texmf-dist/fonts/tfm/public/knuth-lib")))
+                     (for-each (cut install-file <> tfm)
+                               (find-files "build" "\\.tfm"))
+                     #t))))))))
+      (native-inputs
+       `(("texlive-bin" ,texlive-bin)
+         ("texlive-metafont" ,texlive-metafont)))
+      (home-page "https://www.ctan.org/pkg/knuth-lib")
+      (synopsis "Small library of METAFONT sources")
+      (description "This is a collection of core TeX and METAFONT macro files
 from Donald Knuth, including the plain format, plain base, and the MF logo
 fonts.")
-    (license license:knuth)))
+      (license license:knuth))))
+
+(define-deprecated-package texlive-fonts-knuth-lib texlive-knuth-lib)
 
 (define-public texlive-fonts-latex
   (package
@@ -986,7 +1139,7 @@ fonts.")
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+             (let ((mf (assoc-ref inputs "texlive-metafont")))
                ;; Tell mf where to find mf.base
                (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                ;; Tell mf where to look for source files
@@ -1025,7 +1178,7 @@ fonts.")
                #t))))))
     (native-inputs
      `(("texlive-bin" ,texlive-bin)
-       ("texlive-metafont-base" ,texlive-metafont-base)
+       ("texlive-metafont" ,texlive-metafont)
        ("texlive-cm" ,texlive-cm)))
     (home-page "https://www.ctan.org/pkg/latex-fonts")
     (synopsis "Collection of fonts used in LaTeX distributions")
@@ -1035,202 +1188,105 @@ class), line and circle fonts (for use in the picture environment) and LaTeX
 symbol fonts.")
     (license license:lppl1.2+)))
 
-(define-public texlive-latex-mflogo
-  (package
-    (name "texlive-latex-mflogo")
-    (version (number->string %texlive-revision))
-    (source
-     (origin
-       (method svn-fetch)
-       (uri (texlive-ref "latex" "mflogo"))
-       (file-name (string-append name "-" version "-checkout"))
-       (sha256
-        (base32
-         "15i2ib6nvhf31g1b92c6njf7n0g29znlq7hbfp9ii7qabhcwwvrj"))))
-    (build-system texlive-build-system)
-    (arguments '(#:tex-directory "latex/mflogo"))
-    (home-page "http://www.ctan.org/pkg/mflogo")
-    (synopsis "LaTeX support for Metafont logo fonts")
-    (description
-     "This package provides LaTeX and font definition files to access the
-Knuthian mflogo fonts described in The Metafontbook and to typeset Metafont
-logos in LaTeX documents.")
-    (license license:lppl)))
-
-(define-public texlive-mflogo-font
-  (package
-    (inherit (simple-texlive-package
-              "texlive-mflogo-font"
-              (list "/doc/fonts/mflogo-font/README"
-                    "/fonts/afm/hoekwater/mflogo-font/"
-                    "/fonts/map/dvips/mflogo-font/"
-                    "/fonts/type1/hoekwater/mflogo-font/")
-              (base32
-               "094mknjv8ki2pvj1zin0f1z4f1w12g0cfqjiqcsawjsry4yfrmbg")
-              #:trivial? #t))
-    (home-page "https://www.ctan.org/pkg/mflogo-font")
-    (synopsis "Metafont logo font")
-    (description
-     "These fonts were created in METAFONT by Knuth, for his own publications.
-At some stage, the letters P and S were added, so that the METAPOST logo could
-also be expressed.  The fonts were originally issued (of course) as METAFONT
-source; they have since been autotraced and reissued in Adobe Type 1 format by
-Taco Hoekwater.")
-    (license license:knuth)))
-
-(define-public texlive-fonts-mflogo-font
-  (deprecated-package "texlive-fonts-mflogo-font" texlive-mflogo-font))
-
-(define-public texlive-amsfonts
+(define-public texlive-mflogo
   (let ((template (simple-texlive-package
-                   "texlive-amsfonts"
-                   (list "/source/latex/amsfonts/"
-                         "/fonts/source/public/amsfonts/"
-                         "/fonts/type1/public/amsfonts/"
-                         "/fonts/afm/public/amsfonts/"
-                         "/fonts/map/dvips/amsfonts/"
-                         "/tex/plain/amsfonts/"
-                         "/doc/fonts/amsfonts/")
+                   "texlive-mflogo"
+                   (list "/doc/latex/mflogo/"
+                         "/source/latex/mflogo/"
+                         "/fonts/source/public/mflogo/logosl8.mf")
                    (base32
-                    "15q70nkjf8wqzbd5ivcdx3i2sdgqxjb38q0qn9a2qw9i0qcnx6zw"))))
+                    "1vb4mg7fh4k54g7nqwiw3qm4iir8whpfnspis76l4sddzar1amh7"))))
     (package
       (inherit template)
       (arguments
        (substitute-keyword-arguments (package-arguments template)
-         ((#:build-targets _ #t)
-          '(list "amsfonts.ins"))
-         ((#:tex-directory _ #t)
-          "latex/amsfonts")
-         ((#:modules modules '())
-          `((guix build texlive-build-system)
+         ((#:modules _ '())
+          '((guix build texlive-build-system)
             (guix build utils)
-            (ice-9 match)
             (srfi srfi-1)
             (srfi srfi-26)))
-         ((#:phases phases)
+         ((#:tex-directory _ #t)
+          "latex/mflogo")
+         ((#:phases phases '())
           `(modify-phases ,phases
-             (add-before 'build 'build-fonts
+             (add-after 'unpack 'chdir
+               (lambda _
+                 (chdir "source/latex/mflogo") #t))
+             (add-after 'build 'build-font-metrics
                (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((mf  (assoc-ref inputs "texlive-union"))
-                       (src (string-append (getcwd) "/fonts/source/public/amsfonts/")))
-                   ;; Make METAFONT reproducible
-                   (setenv "SOURCE_DATE_EPOCH" "1")
+                 (let ((root "../../..")
+                       (mf (assoc-ref inputs "texlive-metafont"))
+                       (kl (assoc-ref inputs "texlive-knuth-lib")))
                    ;; Tell mf where to find mf.base
-                   (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
+                   (setenv "MFBASES"
+                           (string-append mf "/share/texmf-dist/web2c"))
                    ;; Tell mf where to look for source files
                    (setenv "MFINPUTS"
-                           (string-append src ":"
-                                          src "/cmextra:"
-                                          src "/cyrillic:"
-                                          src "/dummy:"
-                                          src "/symbols:"
+                           (string-append root ":"
                                           mf "/share/texmf-dist/metafont/base:"
-                                          (assoc-ref inputs "texlive-cm")
-                                          "/share/texmf-dist/fonts/source/public/cm")))
-                 (let ((build (string-append (getcwd) "/build-fonts")))
-                   (mkdir-p build)
-                   (with-directory-excursion "fonts/source/public/amsfonts"
-                     (for-each (lambda (font)
-                                 (format #t "building font ~a\n" (basename font ".mf"))
-                                 (with-directory-excursion (dirname font)
-                                   (invoke "mf" "-progname=mf"
-                                           (string-append "-output-directory=" build)
-                                           (string-append "\\"
-                                                          "mode:=ljfour; "
-                                                          "mag:=1; "
-                                                          "nonstopmode; "
-                                                          "input "
-                                                          (getcwd) "/"
-                                                          (basename font ".mf")))))
-                               (find-files "." "[0-9]+\\.mf$"))))
-
-                 ;; There are no metafont sources for the Euler fonts, so we
-                 ;; convert the afm files instead.
-                 (let ((build (string-append (getcwd) "/build-fonts/euler")))
-                   (mkdir build)
-                   (with-directory-excursion "fonts/afm/public/amsfonts/"
-                     (for-each (lambda (font)
-                                 (format #t "converting afm font ~a\n" (basename font ".afm"))
-                                 (invoke "afm2tfm" font
-                                         (string-append build "/"
-                                                        (basename font ".tfm"))))
-                               (find-files "." "\\.afm$")))
-
-                   ;; Frustratingly, not all fonts can be created this way.  To
-                   ;; generate eufm8.tfm, for example, we first scale down
-                   ;; eufm10.afm to eufm8.pl, and then generate the tfm file from
-                   ;; the pl file.
-                   (setenv "TEXINPUTS"
-                           (string-append build "//:"
-                                          (getcwd) "/fonts/afm/public/amsfonts//:"
-                                          (getcwd) "/source/latex/amsfonts//:"
-                                          (assoc-ref inputs "texlive-union") "//"))
-                   (with-directory-excursion build
-                     (for-each (match-lambda
-                                 (((target-base target-size)
-                                   (source-base source-size))
-                                  (let ((factor (number->string
-                                                 (truncate/ (* 1000 target-size)
-                                                            source-size))))
-                                    (invoke "tex"
-                                            "-interaction=scrollmode"
-                                            (string-append "\\input fontinst.sty "
-                                                           "\\transformfont{" target-base "}"
-                                                           "{\\scalefont{" factor "}"
-                                                           "{\\fromafm{" source-base "}}} "
-                                                           "\\bye")))
-                                  (invoke "pltotf"
-                                          (string-append target-base ".pl")
-                                          (string-append target-base ".tfm"))
-                                  (delete-file (string-append target-base ".pl"))))
-
-                               '((("eufm8" 8) ("eufm10" 10))
-
-                                 (("eufb6" 6) ("eufb7" 7))
-                                 (("eufb8" 8) ("eufb10" 10))
-                                 (("eufb9" 9) ("eufb10" 10))
-
-                                 (("eufm6" 6) ("eufb7" 7))
-                                 (("eufm9" 9) ("eufb10" 10))
-
-                                 (("eurb6" 6) ("eurb7" 7))
-                                 (("eurb8" 8) ("eurb10" 10))
-                                 (("eurb9" 9) ("eurb10" 10))
-
-                                 (("eurm6" 6) ("eurm7" 7))
-                                 (("eurm8" 8) ("eurm10" 10))
-                                 (("eurm9" 9) ("eurm10" 10))))))
+                                          kl "/share/texmf-dist/fonts/source/public/knuth-lib:"
+                                          root "/fonts/source/public/mflogo/"))
+                   (for-each (lambda (font)
+                               (format #t "building font ~a\n" font)
+                               (invoke "mf" "-progname=mf"
+                                       "-output-directory=build"
+                                       (string-append "\\"
+                                                      "mode:=ljfour; "
+                                                      "mag:=1; "
+                                                      "scrollmode; "
+                                                      "input " (basename font))))
+                             (find-files (string-append root
+                                                        "/fonts/source/public/mflogo/")
+                                         "\\.mf$")))
                  #t))
-             (add-after 'install 'install-generated-fonts
-               (lambda* (#:key inputs outputs #:allow-other-keys)
-                 (copy-recursively "build-fonts"
-                                   (string-append
-                                    (assoc-ref outputs "out")
-                                    "/share/texmf-dist/fonts/tfm/public/amsfonts"))
-                 #t))))))
+             (add-before 'install 'install-fonts
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (tfm (string-append
+                              out "/share/texmf-dist/fonts/tfm/public/mflogo")))
+                   (for-each (lambda (file)
+                               (install-file file tfm)
+                               (delete-file file))
+                             (find-files "build" "\\.tfm"))
+                   #t)))))))
       (native-inputs
-       `(("texlive-union" ,(texlive-union (list texlive-tex-fontinst-base
-                                                texlive-cm
-                                                texlive-metafont-base)))))
-      (home-page "https://www.ctan.org/pkg/amsfonts")
-      (synopsis "TeX fonts from the American Mathematical Society")
+       `(("texlive-bin" ,texlive-bin)
+         ("texlive-metafont" ,texlive-metafont)
+         ("texlive-knuth-lib" ,texlive-knuth-lib)))
+      (home-page "http://www.ctan.org/pkg/mflogo")
+      (synopsis "LaTeX support for Metafont logo fonts")
       (description
-       "This package provides an extended set of fonts for use in mathematics,
-including: extra mathematical symbols; blackboard bold letters (uppercase
-only); fraktur letters; subscript sizes of bold math italic and bold Greek
-letters; subscript sizes of large symbols such as sum and product; added sizes
-of the Computer Modern small caps font; cyrillic fonts (from the University of
-Washington); Euler mathematical fonts.  All fonts are provided as Adobe Type 1
-files, and all except the Euler fonts are provided as Metafont source.  The
-distribution also includes the canonical Type 1 versions of the Computer
-Modern family of fonts.  The Euler fonts are supported by separate packages;
-details can be found in the documentation.")
-      (license license:silofl1.1))))
+       "This package provides LaTeX and font definition files to access the
+Knuthian mflogo fonts described in The Metafontbook and to typeset Metafont
+logos in LaTeX documents.")
+      (license license:lppl))))
+
+(define-deprecated-package texlive-latex-mflogo texlive-mflogo)
+
+(define-public texlive-mflogo-font
+  (package
+    (inherit (simple-texlive-package
+              "texlive-mflogo-font"
+              (list "/doc/fonts/mflogo-font/README"
+                    "/fonts/afm/hoekwater/mflogo-font/"
+                    "/fonts/map/dvips/mflogo-font/"
+                    "/fonts/type1/hoekwater/mflogo-font/")
+              (base32
+               "094mknjv8ki2pvj1zin0f1z4f1w12g0cfqjiqcsawjsry4yfrmbg")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/mflogo-font")
+    (synopsis "Metafont logo font")
+    (description
+     "These fonts were created in METAFONT by Knuth, for his own publications.
+At some stage, the letters P and S were added, so that the METAPOST logo could
+also be expressed.  The fonts were originally issued (of course) as METAFONT
+source; they have since been autotraced and reissued in Adobe Type 1 format by
+Taco Hoekwater.")
+    (license license:knuth)))
+
+(define-deprecated-package texlive-fonts-mflogo-font texlive-mflogo-font)
 
-;; XXX: we can only change texlive-amsfonts on the core-updates branch.  This
-;; patched version generates only tfm files for fonts provided by the source
-;; files of this package, not variants of the fonts provided by texlive-cm.
-(define-public texlive-amsfonts/patched
+(define-public texlive-amsfonts
   (let ((template (simple-texlive-package
                    "texlive-amsfonts"
                    (list "/source/latex/amsfonts/"
@@ -1260,22 +1316,11 @@ details can be found in the documentation.")
           `(modify-phases ,phases
              (add-before 'build 'build-fonts
                (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((mf  (assoc-ref inputs "texlive-union"))
-                       (src (string-append (getcwd) "/fonts/source/public/amsfonts/")))
-                   ;; Make METAFONT reproducible
-                   (setenv "SOURCE_DATE_EPOCH" "1")
-                   ;; Tell mf where to find mf.base
-                   (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
-                   ;; Tell mf where to look for source files
-                   (setenv "MFINPUTS"
-                           (string-append src ":"
-                                          src "/cmextra:"
-                                          src "/cyrillic:"
-                                          src "/dummy:"
-                                          src "/symbols:"
-                                          mf "/share/texmf-dist/metafont/base:"
-                                          (assoc-ref inputs "texlive-cm")
-                                          "/share/texmf-dist/fonts/source/public/cm")))
+                 ;; Allow self fonts sources and other resources to be
+                 ;; discovered.
+                 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF")
+                                                     ":" (getcwd)))
+
                  (let ((build (string-append (getcwd) "/build-fonts")))
                    (mkdir-p build)
                    (with-directory-excursion "fonts/source/public/amsfonts"
@@ -1297,7 +1342,7 @@ details can be found in the documentation.")
                  ;; convert the afm files instead.
                  (let ((build (string-append (getcwd) "/build-fonts/euler")))
                    (mkdir build)
-                   (with-directory-excursion "fonts/afm/public/amsfonts/"
+                   (with-directory-excursion "fonts/afm/public/amsfonts/euler"
                      (for-each (lambda (font)
                                  (format #t "converting afm font ~a\n" (basename font ".afm"))
                                  (invoke "afm2tfm" font
@@ -1311,10 +1356,9 @@ details can be found in the documentation.")
                    ;; eufm10.afm to eufm8.pl, and then generate the tfm file from
                    ;; the pl file.
                    (setenv "TEXINPUTS"
-                           (string-append build "//:"
+                           (string-append ":" build "//:"
                                           (getcwd) "/fonts/afm/public/amsfonts//:"
-                                          (getcwd) "/source/latex/amsfonts//:"
-                                          (assoc-ref inputs "texlive-union") "//"))
+                                          (getcwd) "/source/latex/amsfonts//:"))
                    (with-directory-excursion build
                      (for-each (match-lambda
                                  (((target-base target-size)
@@ -1349,19 +1393,16 @@ details can be found in the documentation.")
 
                                  (("eurm6" 6) ("eurm7" 7))
                                  (("eurm8" 8) ("eurm10" 10))
-                                 (("eurm9" 9) ("eurm10" 10))))))
-                 #t))
+                                 (("eurm9" 9) ("eurm10" 10))))))))
              (add-after 'install 'install-generated-fonts
                (lambda* (#:key inputs outputs #:allow-other-keys)
                  (copy-recursively "build-fonts"
                                    (string-append
                                     (assoc-ref outputs "out")
-                                    "/share/texmf-dist/fonts/tfm/public/amsfonts"))
-                 #t))))))
+                                    "/share/texmf-dist/fonts/tfm/public/amsfonts"))))))))
       (native-inputs
-       `(("texlive-union" ,(texlive-union (list texlive-tex-fontinst-base
-                                                texlive-cm
-                                                texlive-metafont-base)))))
+       `(("texlive-updmap.cfg" ,(texlive-updmap.cfg
+                                 (list texlive-fontinst)))))
       (home-page "https://www.ctan.org/pkg/amsfonts")
       (synopsis "TeX fonts from the American Mathematical Society")
       (description
@@ -1377,11 +1418,9 @@ Modern family of fonts.  The Euler fonts are supported by separate packages;
 details can be found in the documentation.")
       (license license:silofl1.1))))
 
-(define-public texlive-fonts-amsfonts
-  (deprecated-package "texlive-fonts-amsfonts" texlive-amsfonts))
+(define-deprecated-package texlive-fonts-amsfonts texlive-amsfonts)
 
-(define-public texlive-latex-amsfonts
-  (deprecated-package "texlive-latex-amsfonts" texlive-amsfonts))
+(define-deprecated-package texlive-latex-amsfonts texlive-amsfonts)
 
 (define-public texlive-mkpattern
   (package
@@ -1425,7 +1464,7 @@ output encodings, and features generation of clean UTF-8 patterns.")
              ;; Build tfm font.
              (replace 'build
                (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+                 (let ((mf (assoc-ref inputs "texlive-metafont")))
                    ;; Tell mf where to find mf.base
                    (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                    ;; Tell mf where to look for source files
@@ -1451,7 +1490,7 @@ output encodings, and features generation of clean UTF-8 patterns.")
                  #t))))))
       (native-inputs
        `(("texlive-bin" ,texlive-bin)
-         ("texlive-metafont-base" ,texlive-metafont-base)
+         ("texlive-metafont" ,texlive-metafont)
          ("texlive-cm" ,texlive-cm)))
       (home-page "https://www.ctan.org/pkg/etex")
       (synopsis "Extended version of TeX")
@@ -1469,7 +1508,7 @@ incorporates the e-TeX extensions.")
               "texlive-tex-plain"
               (list "/tex/plain/")
               (base32
-               "1m4qpaszwfv7j8a85rlwl7rs4iv5nlj67c1vvn6ysly72h9gjydb")
+               "0gwygkm8i2jmpf7bfg6fb6824rl7fq4a2s0wni73v0fz6s4chr1n")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/plain")
     (synopsis "Plain TeX format and supporting files")
@@ -1576,11 +1615,9 @@ language.")
   (package
     (inherit (texlive-hyphen-package
               "texlive-hyphen-bulgarian" "bg"
-              (list "/doc/generic/hyph-utf8/bg/azbukaExtended.pdf"
-                    "/doc/generic/hyph-utf8/bg/azbukaExtended.tex"
-                    "/tex/generic/hyph-utf8/patterns/tex/hyph-bg.tex")
+              '("/tex/generic/hyph-utf8/patterns/tex/hyph-bg.tex")
               (base32
-               "0ngrgw2rmipxss76rgfk62x9nnsgwmaxxna2jqxxhybai3q39mx5")))
+               "0m254y71j3qrb71klvfalfmic3kjy31l85b9cgpdm5yznlsq3i8d")))
     (synopsis "Hyphenation patterns for Bulgarian")
     (description "The package provides hyphenation patterns for the Bulgarian
 language in T2A and UTF-8 encodings.")
@@ -1604,9 +1641,10 @@ T1/EC and UTF-8 encodings.")
   (package
     (inherit (texlive-hyphen-package
               "texlive-hyphen-chinese" "zh-latn-pinyin"
-              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-zh-latn-pinyin.tex")
+              '("/tex/generic/hyph-utf8/patterns/ptex/hyph-zh-latn-pinyin.ec.tex"
+                "/tex/generic/hyph-utf8/patterns/tex/hyph-zh-latn-pinyin.tex")
               (base32
-               "1j68mry2zy91m1kbzwhin5q2jajf6xh48npdds8wvp1sqmzih2a3")))
+               "1hhh30hcjymm2igpllly04cavsfmd6xrjkd9zax6b2wdxn3ka4pm")))
     (synopsis "Hyphenation patterns for unaccented Chinese pinyin")
     (description "The package provides hyphenation patterns for unaccented
 Chinese pinyin T1/EC and UTF-8 encodings.")
@@ -1748,12 +1786,24 @@ be replaced by files tailored to individual languages.")
               "texlive-hyphen-finnish" "fi"
               (list "/tex/generic/hyph-utf8/patterns/tex/hyph-fi.tex")
               (base32
-               "1f72b4ydb4zddvw2i004948khmwzigxkdkwfym5v1kkq0183sfpj")))
+               "1pa8sjs9zvnv1y6dma4s60sf9cr4zrvhxwm6i8cnshm84q16w4bc")))
     (synopsis "Hyphenation patterns for Finnish")
     (description "The package provides hyphenation patterns for Finnish in
 T1/EC and UTF-8 encodings.")
     (license license:public-domain)))
 
+(define-public texlive-hyphen-schoolfinnish
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-schoolfinnish" "fi-x-school"
+              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-fi-x-school.tex")
+              (base32
+               "1w5n6gaclgifbbnafg32vz3mfaibyldvh4yh1ya3sq9fwfmv035c")))
+    (synopsis "Hyphenation patterns for Finnish for school")
+    (description "The package provides hyphenation patterns for Finnish for
+school in T1/EC and UTF-8 encodings.")
+    (license license:public-domain)))
+
 (define-public texlive-hyphen-french
   (package
     (inherit (texlive-hyphen-package
@@ -1815,7 +1865,7 @@ T8M, T8K, and UTF-8 encodings.")
                     "/tex/generic/dehyph/dehyphtex.tex"
                     "/tex/generic/dehyph/README")
               (base32
-               "0wp5by5kkf4ac6li5mbppqzw11500wa7f22p5vpz3m1kwd15zavw")))
+               "17cc5hd0fr3ykpgly9nxaiz4sik3kmfn2wyxz1fkdnqqhl3i41a0")))
     (synopsis "Hyphenation patterns for German")
     (description "This package provides hyphenation patterns for German in
 T1/EC and UTF-8 encodings, for traditional and reformed spelling, including
@@ -1845,10 +1895,10 @@ in monotonic and polytonic spelling in LGR and UTF-8 encodings.")
     (inherit (texlive-hyphen-package
               "texlive-hyphen-hungarian" "hu"
               (list "/doc/generic/huhyphen/"
-                    "/doc/generic/hyph-utf8/hu/"
+                    "/doc/generic/hyph-utf8/languages/hu/"
                     "/tex/generic/hyph-utf8/patterns/tex/hyph-hu.tex")
               (base32
-               "1j1b8kksg9r8nmjyjvvz8fr3hgcrjj6jlybf9p06nwrrwm2r8j8f")))
+               "006d2290lcsqzh9ljansbaj9k52s17zgkw0kpsspn5l7a8n00zcl")))
     (synopsis "Hyphenation patterns for Hungarian")
     (description "This package provides hyphenation patterns for Hungarian in
 T1/EC and UTF-8 encodings.")
@@ -1960,11 +2010,12 @@ Europe, in T1/EC and UTF-8 encodings.")
   (package
     (inherit (texlive-hyphen-package
               "texlive-hyphen-latin" '("la-x-classic" "la-x-liturgic" "la")
-              (list "/tex/generic/hyph-utf8/patterns/tex/hyph-la-x-classic.tex"
-                    "/tex/generic/hyph-utf8/patterns/tex/hyph-la-x-liturgic.tex"
-                    "/tex/generic/hyph-utf8/patterns/tex/hyph-la.tex")
+              '("/tex/generic/hyph-utf8/patterns/tex/hyph-la-x-classic.tex"
+                "/tex/generic/hyph-utf8/patterns/tex/hyph-la-x-liturgic.tex"
+                "/tex/generic/hyph-utf8/patterns/tex/hyph-la.tex"
+                "/tex/generic/hyph-utf8/patterns/tex-8bit/hyph-la-x-classic.ec.tex")
               (base32
-               "0rxg8a4s5cpj8vlkz5a74a036axda5jqgvr3f9aj2cc2x9f2f3w9")))
+               "119rf6sk1f639ky6zr9njn21nsxzgfmjci94y26745qs8w08ilkl")))
     (synopsis "Liturgical Latin hyphenation patterns")
     (description "This package provides hyphenation patterns for Latin in
 T1/EC and UTF-8 encodings, mainly in modern spelling (u when u is needed and v
@@ -2006,6 +2057,19 @@ L7X and UTF-8 encodings.")
     ;; the hyph-utf8 package we choose the LPPL license.
     (license license:lppl)))
 
+(define-public texlive-hyphen-macedonian
+  (package
+    (inherit (texlive-hyphen-package
+              "texlive-hyphen-macedonian" "mk"
+              '("/tex/generic/hyph-utf8/patterns/tex/hyph-mk.tex"
+                "/tex/generic/hyph-utf8/patterns/tex-8bit/hyph-mk.macedonian.tex")
+              (base32
+               "1fv6y8gpic5ciw8cclfxc8h3wr5xir1j0a7shixja1pmdyz7db2b")))
+    (synopsis "Macedonian hyphenation patterns")
+    (description "This package provides hypenation patterns for Macedonian.")
+    ;; XXX: License just says 'GPL'.  Assume GPL2 since the file predates GPL3.
+    (license license:gpl2+)))
+
 (define-public texlive-hyphen-mongolian
   (package
     (inherit (texlive-hyphen-package
@@ -2144,10 +2208,10 @@ T2A and UTF-8 encodings.")
   (package
     (inherit (texlive-hyphen-package
               "texlive-hyphen-sanskrit" "sa"
-              (list "/doc/generic/hyph-utf8/sa/hyphenmin.txt"
+              (list "/doc/generic/hyph-utf8/languages/sa/hyphenmin.txt"
                     "/tex/generic/hyph-utf8/patterns/tex/hyph-sa.tex")
               (base32
-               "0gi2qk0wf388h9n25gzhv0cdz67ph83wal8h3iz2sqnpdjsw8kpc")))
+               "1bkzj8swj4lbswf1vr4pb1jg6dixzs7p8h8zm8s8as52h442aida")))
     (synopsis "Sanskrit hyphenation patterns")
     (description "This package provides hyphenation patterns for Sanskrit and
 Prakrit in longdesc transliteration, and in Devanagari, Bengali, Kannada,
@@ -2205,7 +2269,7 @@ T1/EC and UTF-8 encodings.")
               "texlive-hyphen-spanish" "es"
               (list "/tex/generic/hyph-utf8/patterns/tex/hyph-es.tex")
               (base32
-               "1h3yg9vcq0lf7hxv0ahkqmyg269dxjs8m2mz8sgz5l1fxmvahvaj")))
+               "05lbvjkj304xxghyihk8js0kmg97ddlgijld3bp81bc28h4cav0v")))
     (synopsis "Hyphenation patterns for Spanish")
     (description "The package provides hyphenation patterns for Spanish in
 T1/EC and UTF-8 encodings.")
@@ -2325,7 +2389,7 @@ T1/EC and UTF-8 encodings.")
                     "/doc/generic/hyph-utf8/img/miktex-languages.png"
                     "/doc/generic/hyph-utf8/img/texlive-collection.png")
               (base32
-               "1bar5mc808ch20anhqrdxcwiych359qsvr7mggxpg2l2kq5xdyq0")))
+               "0rgp0zn36gwzqwpmjb9h01ns3m19v3r7lpw1h0pc9bx115w6c9jx")))
     (outputs '("out" "doc"))
     (build-system gnu-build-system)
     (arguments
@@ -2361,7 +2425,7 @@ T1/EC and UTF-8 encodings.")
              (setenv "TFMFONTS"
                      (string-append (assoc-ref inputs "texlive-cm")
                                     "/share/texmf-dist/fonts/tfm/public/cm:"
-                                    (assoc-ref inputs "texlive-fonts-knuth-lib")
+                                    (assoc-ref inputs "texlive-knuth-lib")
                                     "/share/texmf-dist/fonts/tfm/public/knuth-lib"))
              ;; ...and find all tex files in this environment.
              (setenv "TEXINPUTS"
@@ -2415,7 +2479,7 @@ T1/EC and UTF-8 encodings.")
        ;; for a working "tex".
        ("texlive-tex-plain" ,texlive-tex-plain)
        ("texlive-cm" ,texlive-cm)
-       ("texlive-fonts-knuth-lib" ,texlive-fonts-knuth-lib)
+       ("texlive-knuth-lib" ,texlive-knuth-lib)
        ("texlive-hyphen-base" ,texlive-hyphen-base)))
     (home-page "https://ctan.org/pkg/hyph-utf8")
     (synopsis "Hyphenation patterns expressed in UTF-8")
@@ -2448,8 +2512,7 @@ converters, will completely supplant the older patterns.")
                    license:public-domain
                    license:wtfpl2))))
 
-(define-public texlive-generic-hyph-utf8
-  (deprecated-package "texlive-generic-hyph-utf8" texlive-hyph-utf8))
+(define-deprecated-package texlive-generic-hyph-utf8 texlive-hyph-utf8)
 
 (define-public texlive-dehyph-exptl
   (package
@@ -2458,7 +2521,7 @@ converters, will completely supplant the older patterns.")
               (list "/tex/generic/dehyph-exptl/"
                     "/doc/generic/dehyph-exptl/")
               (base32
-               "1fnqc63gz8gvdyfz45bx8dxn1r1rwrypahs3bqd2vlc8ff76xp86")
+               "0l57a0r4gycp94kz6lrxqvh9m57j2shmbr2laf5zjb0qnrisq46d")
               #:trivial? #t))
     (propagated-inputs
      `(("texlive-hyphen-base" ,texlive-hyphen-base)
@@ -2473,8 +2536,7 @@ bundle.")
     ;; under LPPL.
     (license (list license:expat license:lppl))))
 
-(define-public texlive-generic-dehyph-exptl
-  (deprecated-package "texlive-generic-dehyph-exptl" texlive-dehyph-exptl))
+(define-deprecated-package texlive-generic-dehyph-exptl texlive-dehyph-exptl)
 
 (define-public texlive-ukrhyph
   (package
@@ -2565,7 +2627,7 @@ UCY (Omega Unicode Cyrillic), LCY, LWN (OT2), and koi8-r.")
                     "/web2c/tcvn-t5.tcx"
                     "/web2c/viscii-t5.tcx")
               (base32
-               "191i8n3g46p53bb9dkx2ggwpzy7skgg0pbklsrpx8x4ayd86wcaf")
+               "00q2nny7lw7jxyln6ch4h0alygbrzk8yynliyc291m53kds1h0mr")
               #:trivial? #t))
     (home-page "https://www.tug.org/texlive/")
     (synopsis "Files related to the path searching library for TeX")
@@ -2581,7 +2643,7 @@ mechanism.  This package provides supporting files.")
               "texlive-latexconfig"
               (list "/tex/latex/latexconfig/")
               (base32
-               "1wa7yhdpnz1nyidwgli68fyr33jn951bnniqrih5lj98k09rqc3h")
+               "10ynmd8b9b9l1wl1mva23yz4zir53p6r5z31s39wmxz19pj12qvx")
               #:trivial? #t))
     (home-page "https://www.tug.org/")
     (synopsis "Configuration files for LaTeX-related formats")
@@ -2607,7 +2669,7 @@ formats.")
                          "/tex/latex/base/testpage.tex"
                          "/tex/latex/base/texsys.cfg")
                    (base32
-                    "0m0gjb4hbsf2iqkkx3px4f28r2scjvsjv4zb2whkbnb44apyw1f0")
+                    "0msyjz0937rc7hs77v6la152sdiwd73qj41z1mlyh0m3dns9qz4g")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -2641,7 +2703,7 @@ formats.")
                                '(("texlive-etex" . "/etex")
                                  ("texlive-cm" . "/cm")
                                  ("texlive-fonts-latex" . "/latex-fonts")
-                                 ("texlive-fonts-knuth-lib" . "/knuth-lib")))
+                                 ("texlive-knuth-lib" . "/knuth-lib")))
                           ":"))
                  (let ((cwd (getcwd)))
                    (setenv "TEXINPUTS"
@@ -2651,7 +2713,8 @@ formats.")
                             cwd "/build:"
                             (string-join
                              (map (match-lambda ((_ . dir) dir)) inputs)
-                             "//:"))))
+                             "//:")))
+                   (setenv "LUAINPUTS" (string-append cwd "/build:")))
 
                  ;; This is the actual build step.
                  (mkdir "build")
@@ -2668,12 +2731,13 @@ formats.")
                  (let ((disabled-formats
                         '("aleph aleph" "lamed aleph" "uptex uptex" "euptex euptex"
                           "eptex eptex" "ptex ptex" "pdfxmltex pdftex" "platex eptex"
+                          "platex-dev eptex" "uplatex-dev euptex"
                           "csplain pdftex" "mf mf-nowin" "mex pdftex" "pdfmex pdftex"
-                          "luacsplain luatex"
-                          ,@(if (string-prefix? "powerpc64le"
-                                                (or (%current-target-system)
-                                                    (%current-system)))
-                              '("luajittex") '())
+                          "luacsplain luatex" "optex luatex"
+                          ;; LuaJIT is not ported to powerpc64le* yet and
+                          ;; building these fail on powerpc.
+                          ,@(if (target-powerpc?)
+                              '("luajittex" "luajithbtex" "mfluajit") '())
                           "cont-en xetex" "cont-en pdftex" "pdfcsplain xetex"
                           "pdfcsplain pdftex" "pdfcsplain luatex" "cslatex pdftex"
                           "mptopdf pdftex" "uplatex euptex" "jadetex pdftex"
@@ -2688,7 +2752,10 @@ formats.")
                    (make-file-writable "web2c/fmtutil.cnf")
                    (substitute* "web2c/fmtutil.cnf"
                      (((string-append "^(" (string-join disabled-formats "|") ")") m)
-                      (string-append "#! " m))))
+                      (string-append "#! " m))
+                     (("translate-file=cp227")
+                      (format #f "translate-file=~a/share/texmf-dist/web2c/cp227"
+                              (assoc-ref inputs "texlive-kpathsea")))))
                  (invoke "fmtutil-sys" "--all"
                          "--fmtdir=web2c"
                          (string-append "--cnffile=web2c/fmtutil.cnf"))
@@ -2724,7 +2791,7 @@ formats.")
          ("texlive-kpathsea" ,texlive-kpathsea)
          ("texlive-cm" ,texlive-cm)
          ("texlive-fonts-latex" ,texlive-fonts-latex)
-         ("texlive-fonts-knuth-lib" ,texlive-fonts-knuth-lib)
+         ("texlive-knuth-lib" ,texlive-knuth-lib)
          ("texlive-luatexconfig"
           ,(texlive-origin
             "texlive-luatexconfig" (number->string %texlive-revision)
@@ -2732,7 +2799,7 @@ formats.")
                   "/tex/generic/config/luatexiniconfig.tex"
                   "/web2c/texmfcnf.lua")
             (base32
-             "1gi87wy12r8w8fhx9ajcid382dmqzf6b9070b5nndvbbjrvhwf23")))))
+             "0yjx7nw9mgfgnq1givkzbxh7z7ncw1liaddjgm7n2nwn0aw6xfdg")))))
       (propagated-inputs
        `(("texlive-dehyph-exptl" ,texlive-dehyph-exptl)
          ("texlive-etex" ,texlive-etex)
@@ -2757,6 +2824,7 @@ formats.")
          ("texlive-hyphen-estonian" ,texlive-hyphen-estonian)
          ("texlive-hyphen-ethiopic" ,texlive-hyphen-ethiopic)
          ("texlive-hyphen-finnish" ,texlive-hyphen-finnish)
+         ("texlive-hyphen-schoolfinnish" ,texlive-hyphen-schoolfinnish)
          ("texlive-hyphen-french" ,texlive-hyphen-french)
          ("texlive-hyphen-friulan" ,texlive-hyphen-friulan)
          ("texlive-hyphen-galician" ,texlive-hyphen-galician)
@@ -2774,6 +2842,7 @@ formats.")
          ("texlive-hyphen-latin" ,texlive-hyphen-latin)
          ("texlive-hyphen-latvian" ,texlive-hyphen-latvian)
          ("texlive-hyphen-lithuanian" ,texlive-hyphen-lithuanian)
+         ("texlive-hyphen-macedonian" ,texlive-hyphen-macedonian)
          ("texlive-hyphen-mongolian" ,texlive-hyphen-mongolian)
          ("texlive-hyphen-norwegian" ,texlive-hyphen-norwegian)
          ("texlive-hyphen-occitan" ,texlive-hyphen-occitan)
@@ -2799,6 +2868,12 @@ formats.")
          ("texlive-unicode-data" ,texlive-unicode-data)
          ("texlive-ukrhyph" ,texlive-ukrhyph)
          ("texlive-ruhyphen" ,texlive-ruhyphen)
+         ("texlive-latex-l3kernel" ,texlive-latex-l3kernel)
+         ("texlive-latex-l3backend" ,texlive-latex-l3backend)
+         ;; TODO: This dependency isn't needed for LaTeX version 2021-06-01
+         ;; and later. See:
+         ;; https://tug.org/pipermail/tex-live/2021-June/047180.html
+         ("texlive-latex-l3packages" ,texlive-latex-l3packages)
          ("texlive-latexconfig" ,texlive-latexconfig)))
       (home-page "https://www.ctan.org/pkg/latex-base")
       (synopsis "Base sources of LaTeX")
@@ -2809,6 +2884,60 @@ with the required packages, constitutes what every LaTeX distribution should
 contain.")
       (license license:lppl1.3c+))))
 
+(define-public texlive-latex-atveryend
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-atveryend"
+              '("/doc/latex/atveryend/README.md"
+                "/tex/latex/atveryend/")
+              (base32
+               "1gz5ssxjlqa53a8blsmdk2qjahzc910ldh26xjxfxgqnqb03rqx7")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/atveryend")
+    (synopsis "Hooks at the very end of a document")
+    (description
+     "This LaTeX packages provides two hooks for @code{\\end@{document@}}
+that are executed after the hook of @code{\\AtEndDocument}:
+@code{\\AfterLastShipout} can be used for code that is to be executed right
+after the last @code{\\clearpage} before the @file{.aux} file is closed.
+@code{\\AtVeryEndDocument} is used for code after closing and final reading
+of the @file{.aux} file.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-latex-auxhook
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-auxhook"
+              '("/doc/latex/auxhook/README.md"
+                "/tex/latex/auxhook/")
+              (base32
+               "1xh445shr00rh43nnz03xh8k2mdrxgsr03lllqpgvwhm6yzsydkf")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/auxhook")
+    (synopsis "Hooks for auxiliary files")
+    (description
+     "This package provides hooks for adding code at the beginning of
+@file{.aux} files.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-latex-epstopdf-pkg
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-epstopdf-pkg"
+              '("/doc/latex/epstopdf-pkg/"
+                "/tex/latex/epstopdf-pkg/")
+              (base32
+               "0zl6jiyp2cvvyqx3lwxdkcvvnkqgbwj4issq07cagf61gljq6fns")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/epstopdf-pkg")
+    (synopsis "Call @command{epstopdf} \"on the fly\"")
+    (description
+     "The package adds support for EPS files in the @code{graphicx} package
+when running under pdfTeX.  If an EPS graphic is detected, the package
+spawns a process to convert the EPS to PDF, using the script
+@command{epstopdf}.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-filecontents
   (package
     (name "texlive-latex-filecontents")
@@ -2819,7 +2948,7 @@ contain.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1h78zw0vhldx478zs4v86ajg7vpkysd1kg3npc480qqls3q6ba40"))))
+                "1cmfigg5jx3hmdyh4gv8kwxi7dg076ldkxmr46s05xvhzjig1z9x"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/filecontents"))
     (home-page "https://www.ctan.org/pkg/filecontents")
@@ -2834,31 +2963,6 @@ overwrite existing files and letting you use @code{filecontents} /
 @code{filecontents*} anywhere.")
     (license license:lppl1.3c+)))
 
-(define-public texlive-generic-ifxetex
-  (package
-    (name "texlive-generic-ifxetex")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "generic" "ifxetex"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0w2xj7n0szavj329kds09q626szkc378p3w0sk022q0ln4ksz86d"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "generic/ifxetex"
-       #:tex-format "xelatex"))
-    (inputs
-     `(("texlive-latex-filecontents" ,texlive-latex-filecontents)))
-    (home-page "https://www.ctan.org/pkg/ifxetex")
-    (synopsis "Am I running under XeTeX?")
-    (description
-     "This is a simple package which provides an @code{\\ifxetex} conditional,
-so that other code can determine that it is running under XeTeX.  The package
-requires the e-TeX extensions to the TeX primitive set.")
-    (license license:lppl1.3c+)))
-
 (define-public texlive-epsf
   (package
     (inherit (simple-texlive-package
@@ -2879,8 +2983,7 @@ bundle of packages.  (The latex-graphics bundle is also available to Plain TeX
 users, via its Plain TeX version.)")
     (license license:public-domain)))
 
-(define-public texlive-generic-epsf
-  (deprecated-package "texlive-generic-epsf" texlive-epsf))
+(define-deprecated-package texlive-generic-epsf texlive-epsf)
 
 (define-public texlive-latex-fancyvrb
   (package
@@ -2889,7 +2992,7 @@ users, via its Plain TeX version.)")
               (list "/doc/latex/fancyvrb/README"
                     "/tex/latex/fancyvrb/")
               (base32
-               "1dwkcradz9nwpjwmv1sjzn77lvw25ypr0rrgmf1kd8pd2mw7dxcn")
+               "0pdilgpw4zc0ipp4z9kdi61nymifyjy2mfpk74xk2cw9vhynkk3w")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/fancyvrb")
     (synopsis "Sophisticated verbatim text")
@@ -2909,8 +3012,10 @@ verbatim source).")
               (list "/doc/latex/graphics-def/README.md"
                     "/tex/latex/graphics-def/")
               (base32
-               "0zrbn9cwfnnrrl3b2zsd74ldksp9jwpvjh7z93ild1m75crpb39a")
+               "0b66fy06safyrd717rfr476g1gz6nqfv1vqvam7ac2yy0g0djb17")
               #:trivial? #t))
+    (propagated-inputs
+     `(("texlive-latex-epstopdf-pkg" ,texlive-latex-epstopdf-pkg)))
     (home-page "https://www.ctan.org/pkg/latex-graphics")
     (synopsis "Color and graphics option files")
     (description
@@ -2946,7 +3051,7 @@ set default \"driver\" options for the color and graphics packages.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0nlfhn55ax89rcvpkrl9570671b62kcr4c9l5ch3w5zw9vmi00dz"))))
+                "0fgjl58f25zvagssz4dwmmsclzw8cr7mx00kdrbx2kcnamcb7h8d"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/graphics"))
     (propagated-inputs
@@ -2961,6 +3066,22 @@ documents.  It comprises the packages color, graphics, graphicx, trig, epsfig,
 keyval, and lscape.")
     (license license:lppl1.3c+)))
 
+(define-public texlive-latex-hycolor
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-hycolor"
+              (list "/doc/latex/hycolor/README.md"
+                    "/tex/latex/hycolor/")
+              (base32
+               "026lfb4l7b3q8g6zc68siqandhb1x98cbycn7njknqva6s99aiqn")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/latex-graphics")
+    (synopsis "Color for hyperref and bookmark")
+    (description
+     "This package provides the code for the @code{color} option that is
+used by @code{hyperref} and @code{bookmark}.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-xcolor
   (let ((template (simple-texlive-package
                    "texlive-xcolor"
@@ -2998,32 +3119,122 @@ row colors plus repeated non-aligned material (like horizontal lines) in
 tables.")
       (license license:lppl1.2+))))
 
-(define-public texlive-latex-xcolor
-  (deprecated-package "texlive-latex-xcolor" texlive-xcolor))
+(define-deprecated-package texlive-latex-xcolor texlive-xcolor)
 
-(define-public texlive-latex-hyperref
-  (package
-    (name "texlive-latex-hyperref")
-    (version "6.84a2")
-    ;; The sources in the TeX Live SVN repository do not contain hluatex.dtx,
-    ;; so we fetch the release from GitHub.
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/ho-tex/hyperref/"
-                                  "archive/release-" version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1d3rmjgzh0025a1dza55zb6nzzlgd1y9snwx45wq1c1vf42m79h2"))))
-    (build-system texlive-build-system)
-    (arguments '(#:tex-directory "latex/hyperref"))
-    (propagated-inputs
-     `(("texlive-latex-oberdiek" ,texlive-latex-oberdiek) ; for ltxcmds.sty
-       ("texlive-latex-url" ,texlive-latex-url)))
-    (home-page "https://www.ctan.org/pkg/hyperref")
-    (synopsis "Extensive support for hypertext in LaTeX")
-    (description
-     "The @code{hyperref} package is used to handle cross-referencing commands
+(define-public texlive-xmltex
+  (let ((template (simple-texlive-package
+                   "texlive-xmltex"
+                   (list
+                    "/doc/otherformats/xmltex/"
+                    "/tex/xmltex/")
+                   (base32
+                    "023gv9axq05vwqz50fnkig24dzahwlc4raks2s8xc4pzrv2dv1zy"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "tex/xmltex/base")
+         ((#:phases phases '%standard-phases)
+          `(modify-phases ,phases
+             (add-before 'install 'generate-formats
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (mkdir "web2c")
+                 (for-each (lambda (f)
+                             (copy-file f (basename f)))
+                           (find-files "tex" "\\.(ini|tex)$"))
+                 (invoke "fmtutil-sys" "--byfmt" "xmltex"
+                         "--fmtdir=web2c")
+                 (invoke "fmtutil-sys" "--byfmt" "pdfxmltex"
+                         "--fmtdir=web2c")))
+             (add-after 'install 'install-formats-and-wrappers
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (texlive-bin (assoc-ref inputs "texlive-bin"))
+                        (pdftex (string-append texlive-bin "/bin/pdftex"))
+                        (web2c (string-append out "/share/texmf-dist/web2c")))
+                   (mkdir-p web2c)
+                   (copy-recursively "web2c" web2c)
+                   ;; Create convenience command wrappers.
+                   (mkdir-p (string-append out "/bin"))
+                   (symlink pdftex (string-append out "/bin/xmltex"))
+                   (symlink pdftex (string-append out "/bin/pdfxmltex"))
+                   #t)))))))
+      (propagated-inputs
+       ;; The following fonts are propagated as a texlive-updmap.cfg as the font
+       ;; maps need to be recreated for the fonts to be usable.  They are
+       ;; required by xmltex through mlnames.sty and unicode.sty.
+       `(("texlive" ,(texlive-updmap.cfg
+                      (list
+                       texlive-amsfonts
+                       texlive-babel
+                       texlive-courier
+                       texlive-helvetic
+                       texlive-hyperref
+                       texlive-symbol
+                       texlive-tipa
+                       texlive-times
+                       texlive-zapfding
+                       ;; The following fonts, while not required, are used if
+                       ;; available:
+                       texlive-stmaryrd
+                       texlive-wasy)))))
+      (native-inputs
+       `(("texlive-tex-ini-files" ,texlive-tex-ini-files)))
+      (home-page "https://www.ctan.org/pkg/xmltex/")
+      (synopsis "Support for parsing XML documents")
+      (description "The package provides an implementation of a parser for
+documents matching the XML 1.0 and XML Namespace Recommendations.  Element and
+attribute names, as well as character data, may use any characters allowed in
+XML, using UTF-8 or a suitable 8-bit encoding.")
+      (license license:lppl1.0+))))        ;per xmltex/base/readme.txt
+
+(define-public texlive-hyperref
+  (let ((template (simple-texlive-package
+                   "texlive-hyperref"
+                   (list "/doc/latex/hyperref/"
+                         "/source/latex/hyperref/"
+                         ;; These files are not generated from the sources
+                         "/tex/latex/hyperref/minitoc-hyper.sty"
+                         "/tex/latex/hyperref/ntheorem-hyper.sty"
+                         "/tex/latex/hyperref/xr-hyper.sty")
+                   (base32
+                    "0nmbxaq676m2y9fgdji0bxqchmrli4hwhspijaszx51b3ki6bj2h"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/hyperref")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/hyperref") #t))))))
+      (propagated-inputs
+       `(("texlive-generic-atbegshi" ,texlive-generic-atbegshi)
+         ("texlive-generic-bitset" ,texlive-generic-bitset)
+         ("texlive-generic-etexcmds" ,texlive-generic-etexcmds)
+         ("texlive-generic-gettitlestring" ,texlive-generic-gettitlestring)
+         ("texlive-generic-iftex" ,texlive-generic-iftex)
+         ("texlive-generic-infwarerr" ,texlive-generic-infwarerr)
+         ("texlive-generic-intcalc" ,texlive-generic-intcalc)
+         ("texlive-generic-kvdefinekeys" ,texlive-generic-kvdefinekeys)
+         ("texlive-generic-kvsetkeys" ,texlive-generic-kvsetkeys)
+         ("texlive-generic-ltxcmds" ,texlive-generic-ltxcmds)
+         ("texlive-generic-pdfescape" ,texlive-generic-pdfescape)
+         ("texlive-latex-auxhook" ,texlive-latex-auxhook)
+         ("texlive-latex-atveryend" ,texlive-latex-atveryend)
+         ("texlive-latex-hycolor" ,texlive-latex-hycolor)
+         ("texlive-latex-kvoptions" ,texlive-latex-kvoptions)
+         ("texlive-latex-letltxmacro" ,texlive-latex-letltxmacro)
+         ("texlive-latex-pdftexcmds" ,texlive-latex-pdftexcmds)
+         ("texlive-latex-refcount" ,texlive-latex-refcount)
+         ("texlive-latex-rerunfilecheck" ,texlive-latex-rerunfilecheck)
+         ("texlive-latex-url" ,texlive-latex-url)))
+      (home-page "https://www.ctan.org/pkg/hyperref")
+      (synopsis "Extensive support for hypertext in LaTeX")
+      (description
+       "The @code{hyperref} package is used to handle cross-referencing commands
 in LaTeX to produce hypertext links in the document.  The package provides
 backends for the @code{\\special} set defined for HyperTeX DVI processors; for
 embedded @code{pdfmark} commands for processing by Acrobat
@@ -3031,11 +3242,13 @@ Distiller (@code{dvips} and Y&Y's @code{dvipsone}); for Y&Y's @code{dviwindo};
 for PDF control within pdfTeX and @code{dvipdfm}; for TeX4ht; and for VTeX's
 pdf and HTML backends.  The package is distributed with the @code{backref} and
 @code{nameref} packages, which make use of the facilities of @code{hyperref}.")
-    (license license:lppl1.3+)))
+      (license license:lppl1.3+))))
 
-(define-public texlive-latex-oberdiek
+(define-deprecated-package texlive-latex-hyperref texlive-hyperref)
+
+(define-public texlive-oberdiek
   (package
-    (name "texlive-latex-oberdiek")
+    (name "texlive-oberdiek")
     (version (number->string %texlive-revision))
     (source (origin
               (method svn-fetch)
@@ -3043,7 +3256,7 @@ pdf and HTML backends.  The package is distributed with the @code{backref} and
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0pi2d6gsddcs9wprdbar46s91kdc5fxl1m79g7xrbccsx8s9xbml"))))
+                "1cadrkpdqs65gxsaszfgfd8wqp8pvpik2sjmlyq3hz5p9yna3p9m"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/oberdiek"
@@ -3057,7 +3270,7 @@ pdf and HTML backends.  The package is distributed with the @code{backref} and
                (("ifpdf.ins") "ifpdf.dtx"))
              #t)))))
     (propagated-inputs
-     `(("texlive-generic-ifxetex" ,texlive-generic-ifxetex)))
+     `(("texlive-generic-iftex" ,texlive-generic-iftex)))
     (home-page "https://www.ctan.org/pkg/oberdiek")
     (synopsis "Bundle of packages submitted by Heiko Oberdiek")
     (description
@@ -3066,6 +3279,30 @@ better accessibility support for PDF files; extensible chemists reaction
 arrows; record information about document class(es) used; and many more.")
     (license license:lppl1.3+)))
 
+(define-deprecated-package texlive-latex-oberdiek texlive-oberdiek)
+
+(define-public texlive-latex-rerunfilecheck
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-rerunfilecheck"
+              '("/doc/latex/rerunfilecheck/"
+                "/tex/latex/rerunfilecheck/")
+              (base32
+               "1myz0d5bxhxvl4220ikywh921qld8n324kk9kscqbc5iw4063g56")
+              #:trivial? #t))
+    (propagated-inputs
+     `(("texlive-generic-infwarerr" ,texlive-generic-infwarerr)
+       ("texlive-generic-uniquecounter" ,texlive-generic-uniquecounter)
+       ("texlive-latex-atveryend" ,texlive-latex-atveryend)
+       ("texlive-latex-kvoptions" ,texlive-latex-kvoptions)
+       ("texlive-latex-pdftexcmds" ,texlive-latex-pdftexcmds)))
+    (home-page "https://www.ctan.org/pkg/rerunfilecheck")
+    (synopsis "Checksum based rerun checks on auxiliary files")
+    (description
+     "This package provides additional rerun warnings if some auxiliary
+files have changed.  It is based on MD5 checksum, provided by pdfTeX.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-tools
   (package
     (name "texlive-latex-tools")
@@ -3076,11 +3313,23 @@ arrows; record information about document class(es) used; and many more.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1wqvn4z0s92h5iqzrvxw7hinzp95avjk9v8lnqbqr4kz6nv4xb9l"))))
+                "1vm5wfyd0vbmv31a29fc7k8y14xiw00msvdx9n7dzsn9zpfjflqs"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/tools"
-       #:build-targets '("tools.ins")))
+       #:build-targets '("tools.ins")
+       #:phases (modify-phases %standard-phases
+                  (add-after 'install 'provide-array-2016-10-06.sty
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      ;; XXX: array.sty does:
+                      ;;  "DeclareRelease{}{2016-10-06}{array-2016-10-06.sty}"
+                      ;; ...which causes some users (hypre) to look for that
+                      ;; file specifically.  Provide it.
+                      (with-directory-excursion (string-append
+                                                 (assoc-ref outputs "out")
+                                                 "/share/texmf-dist/tex"
+                                                 "/latex/tools")
+                        (symlink "array.sty" "array-2016-10-06.sty")))))))
     (home-page "https://www.ctan.org/pkg/latex-tools")
     (synopsis "LaTeX standard tools bundle")
     (description
@@ -3115,8 +3364,7 @@ of file names.")
     ;; the latest version is 1.3c.
     (license license:lppl1.3c+)))
 
-(define-public texlive-latex-url
-  (deprecated-package "texlive-latex-url" texlive-url))
+(define-deprecated-package texlive-latex-url texlive-url)
 
 (define-public texlive-tetex
   (package
@@ -3145,10 +3393,15 @@ Live distribution.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0s77z2cbv841l45qrpf0s8qhzfa4wi689lg7zkw88qg18nzvy0ly"))))
+                "068xkinrkl6qjf8r6a9i0msvnzp4y7a3gnd2h12ws0km1dv19r20"))))
     (build-system texlive-build-system)
     (arguments
-     '(#:tex-directory "latex/l3kernel"))
+     '(#:tex-directory "latex/l3kernel"
+       #:tex-engine "tex"
+       #:tex-format #f
+       #:texlive-latex-base #f))
+    (native-inputs
+     `(("texlive-docstrip" ,texlive-docstrip)))
     (home-page "https://www.ctan.org/pkg/l3kernel")
     (synopsis "LaTeX3 programmers’ interface")
     (description
@@ -3159,20 +3412,59 @@ code are built: it is an API for TeX programmers.  The packages are set up so
 that the LaTeX3 conventions can be used with regular LaTeX 2e packages.")
     (license license:lppl1.3c+)))
 
-(define-public texlive-latex-l3packages
+(define-public texlive-latex-l3backend
   (package
-    (name "texlive-latex-l3packages")
+    (name "texlive-latex-l3backend")
     (version (number->string %texlive-revision))
     (source (origin
               (method svn-fetch)
-              (uri (texlive-ref "latex" "l3packages"))
+              (uri (texlive-ref "latex" "l3backend"))
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1cv4fk9pabh7mkxhfsdmh4k8xpmzg1psgcsvd11c869m7n3a629h"))))
+                "0mlwyzssqn6wkyv9hzp24d40p8f20zrjqgvqyqs1rd7q7awan42a"))))
+    (build-system texlive-build-system)
+    (arguments
+     '(#:tex-directory "latex/l3backend"
+       #:tex-engine "tex"
+       #:tex-format #f
+       #:texlive-latex-base #f))
+    (native-inputs
+     `(("texlive-docstrip" ,texlive-docstrip)))
+    (home-page "https://www.ctan.org/pkg/l3backend")
+    (synopsis "LaTeX3 backend drivers")
+    (description
+     "This package forms parts of expl3, and contains the code used to
+interface with backends (drivers) across the expl3 codebase. The functions
+here are defined differently depending on the engine in use. As such, these
+are distributed separately from l3kernel to allow this code to be updated on
+an independent schedule.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-latex-l3packages
+  (package
+    (name "texlive-latex-l3packages")
+    (version (number->string %texlive-revision))
+    (source (texlive-origin name version
+                            '("/source/latex/l3packages/"
+                              ;; These files have been generated with a
+                              ;; bespoke source tree and then modified by
+                              ;; hand. It's unfeasible to recreate them. See:
+                              ;; https://tug.org/pipermail/tex-live/2021-June/047188.html
+                              "/tex/latex/l3packages/xparse/xparse-2018-04-12.sty"
+                              "/tex/latex/l3packages/xparse/xparse-2020-10-01.sty"
+
+                              ;; TODO: This file can be removed when using
+                              ;; LaTeX version 2021-06-01 or newer. See:
+                              ;; https://tug.org/pipermail/tex-live/2021-June/047180.html
+                              "/tex/latex/l3packages/xparse/xparse-generic.tex")
+                            (base32 "05rjxdqhhg7z1z2rmhmwj2qf09xygymayy3jzj9fdphk0pab3amm")))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/l3packages"
+       #:tex-engine "tex"
+       #:tex-format #f
+       #:texlive-latex-base #f
        ;; build-targets must be specified manually since they are in
        ;; sub-directories.
        #:build-targets '("l3keys2e.ins" "xparse.ins" "xfrac.ins" "xfp.ins" "xtemplate.ins")
@@ -3184,16 +3476,23 @@ that the LaTeX3 conventions can be used with regular LaTeX 2e packages.")
            (lambda _
              (let ((cwd (getcwd)))
                (setenv "TEXINPUTS"
-                       (string-append cwd "/l3keys2e:"
-                                      cwd "/xparse:"
-                                      cwd "/xfrac:"
-                                      cwd "/xfp:"
-                                      cwd "/xtemplate"
+                       (string-append cwd "/source/latex/l3packages/l3keys2e:"
+                                      cwd "/source/latex/l3packages/xparse:"
+                                      cwd "/source/latex/l3packages/xfrac:"
+                                      cwd "/source/latex/l3packages/xfp:"
+                                      cwd "/source/latex/l3packages/xtemplate"
                                       ;; The terminating ":" is required to include the
                                       ;; l3kernel input as well.
                                       ":")))
-             #t)))
+             #t))
+         (add-after 'install 'copy-generated-files
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((dest (string-append (assoc-ref outputs "out")
+                                        "/share/texmf-dist/tex/latex/l3packages")))
+               (copy-recursively "tex/latex/l3packages/xparse" dest)))))
        ))
+    (native-inputs
+     `(("texlive-docstrip" ,texlive-docstrip)))
     (propagated-inputs
      `(("texlive-latex-l3kernel" ,texlive-latex-l3kernel)))
     (home-page "https://www.ctan.org/pkg/l3packages")
@@ -3214,58 +3513,83 @@ programming tools and kernel sup­port.  Packages provided in this release are:
 @end enumerate\n")
     (license license:lppl1.3c+)))
 
-(define-public texlive-latex-fontspec
-  (package
-    (name "texlive-latex-fontspec")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "fontspec"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1223cw029n6zff7pqpwbsq1x8v3w63smczkmnybqxkw5h2za8gbz"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "latex/fontspec"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'install-default-fontspec.cfg
-           (lambda* (#:key outputs #:allow-other-keys)
-             (with-output-to-file
-                 (string-append (assoc-ref outputs "out")
-                                "/share/texmf-dist/tex/latex/fontspec/fontspec.cfg")
-               (lambda _
-                 (display "\
-%%% FONTSPEC.CFG %%%
-%
-% This configuration file sets up TeX Ligatures by default for all fonts loaded
-% with `\\setmainfont` and `\\setsansfont`.
-%
-% In addition, `\\setmonofont` has default features to enforce \"monospace\"
-% settings with regard to space stretchability and shrinkability.
-
-\\defaultfontfeatures
- [\\rmfamily,\\sffamily]
- {Ligatures=TeX}
-
-\\defaultfontfeatures
- [\\ttfamily]
- {WordSpace={1,0,0},
-  HyphenChar=None,
-  PunctuationSpace=WordSpace}
-")))
-             #t)))))
-    (propagated-inputs
-     `(("texlive-latex-l3packages" ,texlive-latex-l3packages)))
-    (home-page "https://www.ctan.org/pkg/fontspec")
-    (synopsis "Advanced font selection in XeLaTeX and LuaLaTeX")
-    (description
-     "Fontspec is a package for XeLaTeX and LuaLaTeX.  It provides an
+(define-public texlive-fontspec
+  (let ((template (simple-texlive-package
+                   "texlive-fontspec"
+                   (list "/doc/latex/fontspec/"
+                         "/source/latex/fontspec/"
+                         "/tex/latex/fontspec/fontspec.cfg")
+                   (base32
+                    "06rms8dw1j67v3rgv6xmfykdmgbxi5rp78yxc782cy1sw07blgsg"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/fontspec")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/fontspec/") #t))))))
+      (propagated-inputs
+       `(("texlive-latex-l3packages" ,texlive-latex-l3packages)))
+      (home-page "https://www.ctan.org/pkg/fontspec")
+      (synopsis "Advanced font selection in XeLaTeX and LuaLaTeX")
+      (description
+       "Fontspec is a package for XeLaTeX and LuaLaTeX.  It provides an
 automatic and unified interface to feature-rich AAT and OpenType fonts through
 the NFSS in LaTeX running on XeTeX or LuaTeX engines.  The package requires
 the l3kernel and xparse bundles from the LaTeX 3 development team.")
-    (license license:lppl1.3+)))
+      (license license:lppl1.3+))))
+
+(define-deprecated-package texlive-latex-fontspec texlive-fontspec)
+
+(define-public texlive-l3build
+  (let ((template (simple-texlive-package
+                   "texlive-l3build"
+                   (list "/doc/latex/l3build/"
+                         "/doc/man/man1/l3build.1"
+                         "/scripts/l3build/"
+                         "/tex/latex/l3build/"
+                         ;; TODO: The dtx file builds only the documentation.
+                         ;; We avoid this for a simpler package definition,
+                         ;; but it may be possible to exclude
+                         ;; /doc/latex/l3build and the man page in the future.
+                         "/source/latex/l3build/")
+                   (base32
+                    "1fcay05jj53qgp2b98jpawi0id298fs5xc4y1r5krrfr4sp4hd59")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'install 'patch-shebangs-again
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 ;; XXX: Since the 'patch-shebangs' phase cannot change the
+                 ;; original source files patch the shebangs again here.
+                 (let* ((coreutils (assoc-ref inputs "coreutils"))
+                        (texlive-bin (assoc-ref inputs "texlive-bin"))
+                        (path (list (string-append coreutils "/bin")
+                                    (string-append texlive-bin "/bin"))))
+                   (for-each (lambda (file)
+                               (format #t "~a~%" file)
+                               (patch-shebang file path))
+                             (find-files (assoc-ref outputs "out")))
+                   #t)))))))
+      (inputs
+       `(("coreutils" ,coreutils)
+         ("texlive-bin" ,texlive-bin)))
+      (home-page "https://github.com/latex3/luaotfload")
+      (synopsis "Testing and building system for LaTeX")
+      (description
+       "The l3build module is designed to support the development of
+high-quality LaTeX code by providing: a unit testing system, automated
+typesetting of code sources, and a reliable packaging system for CTAN
+releases.  The bundle consists of a Lua script to run the tasks and a
+@code{.tex} file which provides the testing environment.")
+      (license license:lppl1.3c+))))
 
 ;; The SVN directory contains little more than a dtx file that generates three
 ;; of the many lua files that should be installed as part of this package.
@@ -3291,111 +3615,51 @@ the l3kernel and xparse bundles from the LaTeX 3 development team.")
                             "/share/texmf-dist"))
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure))))
-    (native-inputs
-     `(("texlive-bin" ,texlive-bin)
-       ("unzip" ,unzip)
-       ("zip" ,zip)))
-    (home-page "https://github.com/lualatex/lualibs")
-    (synopsis "Lua modules for general programming (in the (La)TeX world)")
-    (description
-     "Lualibs is a collection of Lua modules useful for general programming.
-The bundle is based on Lua modules shipped with ConTeXt, and made available in
-this bundle for use independent of ConTeXt.")
-    ;; GPL version 2 only
-    (license license:gpl2)))
-
-(define-public texlive-luatex-luaotfload
-  (package
-    (name "texlive-luatex-luaotfload")
-    (version "2.8-fix-2")
-    ;; The release tarball does not contain all source files.
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/lualatex/luaotfload")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0l5l7iq3dxcxl65qaghcpjg27yd9iw1sxa8pnd7xlvlm09dhfdnf"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:make-flags
-       (list (string-append "DESTDIR="
-                            (assoc-ref %outputs "out")
-                            "/share/texmf-dist")
-             "all")
-       #:parallel-build? #f ; not supported
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'configure
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "doc/Makefile"
-               (("rst2man") "rst2man.py")
-               ;; Don't build the PDF.  This requires more of LaTeX.
-               (("\\$\\(DOCPDF\\)") ""))
-
-             (substitute* "Makefile"
-               ;; We don't build the PDF, so don't attempt to install it.
-               (("cp \\$\\(RESOURCES\\) \\$\\(DOCPDF\\)")
-                "cp $(RESOURCES)")
-               (("= \\$\\(DOCPDF\\)") "= ")
-               ;; Fix name of fontloader file
-               (("^LOADER.*= \\$\\(BUILDDIR\\)/fontloader-\\$\\(shell date \\+%F\\).lua")
-                "LOADER = $(BUILDDIR)/fontloader.lua"))
-
-             (mkdir "build")
-
-             ;; Don't download this file.
-             (copy-file (assoc-ref inputs "glyphlist")
-                        "build/glyphlist.txt")
-
-             ;; Don't use git
-             (let ((notes
-                    `((committer . "Philipp Gesang <phg@phi-gamma.net>")
-                      (description . ,version)
-                      (loader . "fontloader.lua")
-                      (revision . "ad480924393fffa2896156e1a32c22f5c61120dd")
-                      (timestamp . "2019-01-01 00:00:00 +0000"))))
-               (substitute* "scripts/mkstatus"
-                 (("local notes.*=.*")
-                  (string-append "local notes = {"
-                                 (string-join
-                                  (map (lambda (entry)
-                                         (format "[\"~a\"]=\"~a\","
-                                                 (symbol->string (car entry))
-                                                 (cdr entry)))
-                                       notes))
-                                 "}"))))
-             #t)))))
+         (delete 'configure))))
     (native-inputs
-     `(("zip" ,zip)
+     `(("texlive-bin" ,texlive-bin)
        ("unzip" ,unzip)
-       ("graphviz" ,graphviz)
-       ("lualatex" ,(texlive-union (list texlive-luatex-lualibs
-                                         texlive-context-base)))
-       ("python-docutils" ,python-docutils)
-       ("glyphlist"
-        ,(origin
-           (method url-fetch)
-           (uri (string-append "https://raw.githubusercontent.com/adobe-type-tools/"
-                               "agl-aglfn/b2a04cb906f9257cc06a2fe0ad4b3d663bc02136/"
-                               "glyphlist.txt"))
-           (sha256
-            (base32 "1s6svfw23rqzdvflv8frgd4xrwvrmsj8szwzqgcd39dp9rpjafjp"))))))
-    (propagated-inputs
-     `(("texlive-luatex-lualibs" ,texlive-luatex-lualibs)))
-    (home-page "https://github.com/lualatex/luaotfload")
-    (synopsis "OpenType font loader for LuaTeX")
+       ("zip" ,zip)))
+    (home-page "https://github.com/lualatex/lualibs")
+    (synopsis "Lua modules for general programming (in the (La)TeX world)")
     (description
-     "Luaotfload is an adaptation of the ConTeXt font loading system for the
+     "Lualibs is a collection of Lua modules useful for general programming.
+The bundle is based on Lua modules shipped with ConTeXt, and made available in
+this bundle for use independent of ConTeXt.")
+    ;; GPL version 2 only
+    (license license:gpl2)))
+
+;; TODO: We should be able to build this from the sources on Github with
+;; texlive-l3build, but I haven't been able to get it to work.
+(define-public texlive-luaotfload
+  (let ((template (simple-texlive-package
+                   "texlive-luaotfload"
+                   (list "/doc/luatex/luaotfload/"
+                         "/doc/man/man1/luaotfload-tool.1"
+                         "/doc/man/man5/luaotfload.conf.5"
+                         "/source/luatex/luaotfload/fontloader-reference-load-order.lua"
+                         "/source/luatex/luaotfload/fontloader-reference-load-order.tex"
+                         "/scripts/luaotfload/luaotfload-tool.lua"
+                         "/tex/luatex/luaotfload/")
+                   (base32
+                    "10wznvxx3qsl88n560py5vyx5r3a3914anbqfhwcmhmwg097xxl4")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (propagated-inputs
+       `(("texlive-luatex-lualibs" ,texlive-luatex-lualibs)))
+      (home-page "https://github.com/lualatex/luaotfload")
+      (synopsis "OpenType font loader for LuaTeX")
+      (description
+       "Luaotfload is an adaptation of the ConTeXt font loading system for the
 Plain and LaTeX formats.  It allows OpenType fonts to be loaded with font
 features accessible using an extended font request syntax while providing
 compatibilitywith XeTeX.  By indexing metadata in a database it facilitates
 loading fonts by their proper names instead of file names.")
-    ;; GPL version 2 only
-    (license license:gpl2)))
+      ;; GPL version 2 only
+      (license license:gpl2))))
+
+(define-deprecated-package texlive-luatex-luaotfload texlive-luaotfload)
 
 (define-public texlive-latex-amsmath
   (package
@@ -3407,7 +3671,7 @@ loading fonts by their proper names instead of file names.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0qgk2332dacsxn1z95qzp35gbs7wrzl1ipjdhnmk1r897msm4sf5"))))
+                "172zybw7rp05jca8wl6x0mh6z6gncdyi1j9wdfyjnhbvqw0z4wi4"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/amsmath"))
     (home-page "https://www.ctan.org/pkg/amsmath")
@@ -3426,64 +3690,84 @@ mathematics, and @code{ntheoremntheorem}, for specifying theorem (and similar)
 definitions.")
     (license license:lppl1.3c+)))
 
-(define-public texlive-latex-amscls
-  (package
-    (name "texlive-latex-amscls")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "amscls"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0c2j9xh4qpi0x1vvcxdjxq6say0zhyr569fryi5cmhp8bclh4kca"))))
-    (build-system texlive-build-system)
-    (arguments
-     `(#:tex-directory "latex/amscls"))
-    (home-page "https://www.ctan.org/pkg/amscls")
-    (synopsis "AMS document classes for LaTeX")
-    (description
-     "This bundle contains three AMS classes: @code{amsartamsart} (for writing
+(define-public texlive-amscls
+  (let ((template (simple-texlive-package
+                   "texlive-amscls"
+                   (list "/doc/latex/amscls/"
+                         "/source/latex/amscls/"
+                         "/bibtex/bst/amscls/")
+                   (base32
+                    "0vw0b815slvfqfd8qffyfzb3xfvyv6k77m12xp0l67hs8p08s5b7"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/amscls")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/amscls/") #t))))))
+      (home-page "https://www.ctan.org/pkg/amscls")
+      (synopsis "AMS document classes for LaTeX")
+      (description
+       "This bundle contains three AMS classes: @code{amsartamsart} (for writing
 articles for the AMS), @code{amsbookamsbook} (for books) and
 @code{amsprocamsproc} (for proceedings), together with some supporting
 material.  The material is made available as part of the AMS-LaTeX
 distribution.")
-    (license license:lppl1.3c+)))
+      (license license:lppl1.3c+))))
 
-(define-public texlive-latex-babel
-  (package
-    (name "texlive-latex-babel")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "babel"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1rwqq841i1rxywymzwkw0cw2yhgvxwjx5mgygfasvypwrwll6f6s"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "generic/babel"
-       #:phases
-       (modify-phases %standard-phases
-         ;; This package tries to produce babel.aux twice but refuses to
-         ;; overwrite the first one.
-         (add-before 'build 'fix-ins
-           (lambda _
-             (substitute* "babel.ins"
-               (("askonceonly") "askforoverwritefalse"))
-             #t)))))
-    (home-page "https://www.ctan.org/pkg/babel")
-    (synopsis "Multilingual support for Plain TeX or LaTeX")
-    (description
-     "The package manages culturally-determined typographical (and other)
+(define-deprecated-package texlive-latex-amscls texlive-amscls)
+
+(define-public texlive-babel
+  (let ((template (simple-texlive-package
+                   "texlive-babel"
+                   (list "/doc/latex/babel/"
+                         "/source/latex/babel/"
+                         "/makeindex/babel/")
+                   (base32
+                    "0qr5vjp79g1c1l6k173qhfdfabgbky73wymzhm56pazx4a8r08wz"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "generic/babel")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/babel/") #t))
+             ;; This package tries to produce babel.aux twice but refuses to
+             ;; overwrite the first one.
+             (add-before 'build 'fix-ins
+               (lambda _
+                 (substitute* "babel.ins"
+                   (("askonceonly") "askforoverwritefalse"))
+                 #t))
+             (add-after 'install 'install-locales
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (let ((locale-directory
+                        (string-append (assoc-ref outputs "out")
+                                       "/share/texmf-dist/tex/generic/babel/locale/")))
+                   (mkdir-p locale-directory)
+                   (invoke "unzip" "locale.zip" "-d"
+                           locale-directory))))))))
+      (native-inputs
+       `(("unzip" ,unzip)))
+      (home-page "https://www.ctan.org/pkg/babel")
+      (synopsis "Multilingual support for Plain TeX or LaTeX")
+      (description
+       "The package manages culturally-determined typographical (and other)
 rules, and hyphenation patterns for a wide range of languages.  A document may
 select a single language to be supported, or it may select several, in which
 case the document may switch from one language to another in a variety of
 ways.  Babel uses contributed configuration files that provide the detail of
 what has to be done for each language.  Users of XeTeX are advised to use the
 polyglossia package rather than Babel.")
-    (license license:lppl1.3+)))
+      (license license:lppl1.3+))))
+
+(define-deprecated-package texlive-latex-babel texlive-babel)
 
 (define-public texlive-generic-babel-english
   (package
@@ -3517,7 +3801,7 @@ for Canadian and USA text.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "129f9w41cb6yyrr6kpv3zz9ml6334hyq1wcz7j9jn47p0hlxqfk8"))))
+                "1x9hnr9gz5mqdb97cinivn9xjnfr4qi996aa4cnr2sm2dsbhqxnp"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "generic/babel-german"))
     (home-page "https://www.ctan.org/pkg/babel-german")
@@ -3535,7 +3819,7 @@ Swiss varieties of German.")
                    "texlive-babel-swedish"
                    (list "/source/generic/babel-swedish/")
                    (base32
-                    "0swdg2l5i7cbcvy4q4xgsnwwnbxiyvs6f5b72kiw7mjn24v27g8f"))))
+                    "03rp4n9wkqyckman765r8v8j2pg5fg9frbfxsnhq0i2mr0yhbr6v"))))
     (package
       (inherit template)
       (arguments
@@ -3578,30 +3862,132 @@ T2* and X2 encodings. These encodings cover (between them) pretty much every
 language that is written in a Cyrillic alphabet.")
     (license license:lppl1.3c+)))
 
-(define-public texlive-latex-psnfss
-  (package
-    (name "texlive-latex-psnfss")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "psnfss"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1920dcq8613yzprasbg80fh4fcjcidvvl54wkx438nimyxcri7qz"))))
-    (build-system texlive-build-system)
-    (arguments '(#:tex-directory "latex/psnfss"))
-    (home-page "https://www.ctan.org/pkg/psnfss")
-    (synopsis "Font support for common PostScript fonts")
-    (description
-     "The PSNFSS collection includes a set of files that provide a complete
+(define-public texlive-psnfss
+  (let ((template (simple-texlive-package
+                   "texlive-psnfss"
+                   (list "/doc/latex/psnfss/"
+                         "/source/latex/psnfss/"
+                         "/fonts/map/dvips/psnfss/"
+
+                         ;; Only the .sty files are generated from the sources.
+                         "/tex/latex/psnfss/8rbch.fd"
+                         "/tex/latex/psnfss/8rpag.fd"
+                         "/tex/latex/psnfss/8rpbk.fd"
+                         "/tex/latex/psnfss/8rpcr.fd"
+                         "/tex/latex/psnfss/8rphv.fd"
+                         "/tex/latex/psnfss/8rpnc.fd"
+                         "/tex/latex/psnfss/8rppl.fd"
+                         "/tex/latex/psnfss/8rptm.fd"
+                         "/tex/latex/psnfss/8rput.fd"
+                         "/tex/latex/psnfss/8rpzc.fd"
+                         "/tex/latex/psnfss/omlbch.fd"
+                         "/tex/latex/psnfss/omlpag.fd"
+                         "/tex/latex/psnfss/omlpbk.fd"
+                         "/tex/latex/psnfss/omlpcr.fd"
+                         "/tex/latex/psnfss/omlphv.fd"
+                         "/tex/latex/psnfss/omlpnc.fd"
+                         "/tex/latex/psnfss/omlppl.fd"
+                         "/tex/latex/psnfss/omlptm.fd"
+                         "/tex/latex/psnfss/omlptmcm.fd"
+                         "/tex/latex/psnfss/omlput.fd"
+                         "/tex/latex/psnfss/omlpzc.fd"
+                         "/tex/latex/psnfss/omlzplm.fd"
+                         "/tex/latex/psnfss/omlzpple.fd"
+                         "/tex/latex/psnfss/omlztmcm.fd"
+                         "/tex/latex/psnfss/omsbch.fd"
+                         "/tex/latex/psnfss/omspag.fd"
+                         "/tex/latex/psnfss/omspbk.fd"
+                         "/tex/latex/psnfss/omspcr.fd"
+                         "/tex/latex/psnfss/omsphv.fd"
+                         "/tex/latex/psnfss/omspnc.fd"
+                         "/tex/latex/psnfss/omsppl.fd"
+                         "/tex/latex/psnfss/omsptm.fd"
+                         "/tex/latex/psnfss/omsput.fd"
+                         "/tex/latex/psnfss/omspzc.fd"
+                         "/tex/latex/psnfss/omspzccm.fd"
+                         "/tex/latex/psnfss/omszplm.fd"
+                         "/tex/latex/psnfss/omszpple.fd"
+                         "/tex/latex/psnfss/omsztmcm.fd"
+                         "/tex/latex/psnfss/omxpsycm.fd"
+                         "/tex/latex/psnfss/omxzplm.fd"
+                         "/tex/latex/psnfss/omxzpple.fd"
+                         "/tex/latex/psnfss/omxztmcm.fd"
+                         "/tex/latex/psnfss/ot1bch.fd"
+                         "/tex/latex/psnfss/ot1pag.fd"
+                         "/tex/latex/psnfss/ot1pbk.fd"
+                         "/tex/latex/psnfss/ot1pcr.fd"
+                         "/tex/latex/psnfss/ot1phv.fd"
+                         "/tex/latex/psnfss/ot1pnc.fd"
+                         "/tex/latex/psnfss/ot1ppl.fd"
+                         "/tex/latex/psnfss/ot1pplj.fd"
+                         "/tex/latex/psnfss/ot1pplx.fd"
+                         "/tex/latex/psnfss/ot1ptm.fd"
+                         "/tex/latex/psnfss/ot1ptmcm.fd"
+                         "/tex/latex/psnfss/ot1put.fd"
+                         "/tex/latex/psnfss/ot1pzc.fd"
+                         "/tex/latex/psnfss/ot1zplm.fd"
+                         "/tex/latex/psnfss/ot1zpple.fd"
+                         "/tex/latex/psnfss/ot1ztmcm.fd"
+                         "/tex/latex/psnfss/t1bch.fd"
+                         "/tex/latex/psnfss/t1pag.fd"
+                         "/tex/latex/psnfss/t1pbk.fd"
+                         "/tex/latex/psnfss/t1pcr.fd"
+                         "/tex/latex/psnfss/t1phv.fd"
+                         "/tex/latex/psnfss/t1pnc.fd"
+                         "/tex/latex/psnfss/t1ppl.fd"
+                         "/tex/latex/psnfss/t1pplj.fd"
+                         "/tex/latex/psnfss/t1pplx.fd"
+                         "/tex/latex/psnfss/t1ptm.fd"
+                         "/tex/latex/psnfss/t1put.fd"
+                         "/tex/latex/psnfss/t1pzc.fd"
+                         "/tex/latex/psnfss/ts1bch.fd"
+                         "/tex/latex/psnfss/ts1pag.fd"
+                         "/tex/latex/psnfss/ts1pbk.fd"
+                         "/tex/latex/psnfss/ts1pcr.fd"
+                         "/tex/latex/psnfss/ts1phv.fd"
+                         "/tex/latex/psnfss/ts1pnc.fd"
+                         "/tex/latex/psnfss/ts1ppl.fd"
+                         "/tex/latex/psnfss/ts1pplj.fd"
+                         "/tex/latex/psnfss/ts1pplx.fd"
+                         "/tex/latex/psnfss/ts1ptm.fd"
+                         "/tex/latex/psnfss/ts1put.fd"
+                         "/tex/latex/psnfss/ts1pzc.fd"
+                         "/tex/latex/psnfss/ufplm.fd"
+                         "/tex/latex/psnfss/ufplmbb.fd"
+                         "/tex/latex/psnfss/upsy.fd"
+                         "/tex/latex/psnfss/upzd.fd")
+                   (base32
+                    "11f14dzhwsy4pli21acccip43d36nf3pac33ihjffnps1i2mhqkd"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/psnfss")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _
+                 (chdir "source/latex/psnfss") #t))))))
+      (native-inputs
+       `(("texlive-cm" ,texlive-cm)))
+      (home-page "https://www.ctan.org/pkg/psnfss")
+      (synopsis "Font support for common PostScript fonts")
+      (description
+       "The PSNFSS collection includes a set of files that provide a complete
 working setup of the LaTeX font selection scheme (NFSS2) for use with common
-PostScript fonts.  It covers the so-called \"Base\" fonts (which are built
-into any Level 2 PostScript printing device and the Ghostscript interpreter)
-and a number of free fonts.  It provides font definition files, macros and
-font metrics.  The bundle as a whole is part of the LaTeX required set of
-packages.")
-    (license license:lppl1.2+)))
+PostScript fonts.  The base set of text fonts covered by PSNFSS includes the
+AvantGarde, Bookman, Courier, Helvetica, New Century Schoolbook, Palatino,
+Symbol, Times Roman and Zapf Dingbats fonts.  In addition, the fonts Bitstream
+Charter and Adobe Utopia are covered.  Separate packages are provided to load
+each font for use as the main text font.  The package @code{helvet} allows
+Helvetica to be loaded with its size scaled to something more appropriate for
+use as a Sans-Serif font to match Times, while @code{pifont} provides the
+means to select single glyphs from symbol fonts.  The bundle as a whole is
+part of the LaTeX required set of packages.")
+      (license license:lppl1.2+))))
+
+(define-deprecated-package texlive-latex-psnfss texlive-psnfss)
 
 ;; For user profiles
 (define-public texlive-base
@@ -3610,17 +3996,19 @@ packages.")
                 texlive-dvips
                 texlive-fontname
                 texlive-cm
+                texlive-cm-super ; to avoid bitmap fonts
                 texlive-fonts-latex
-                texlive-metafont-base
+                texlive-metafont
                 texlive-latex-base
+                texlive-kpathsea       ;for mktex.opt
                 ;; LaTeX packages from the "required" set.
                 texlive-latex-amsmath
-                texlive-latex-amscls
-                texlive-latex-babel
+                texlive-amscls
+                texlive-babel
                 texlive-generic-babel-english
                 texlive-latex-cyrillic
                 texlive-latex-graphics
-                texlive-latex-psnfss
+                texlive-psnfss
                 texlive-latex-tools
                 texlive-tetex)))
     (package
@@ -3648,144 +4036,86 @@ It includes little more than the required set of LaTeX packages.")
                      '()
                      default-packages)))))
 
-(define-public texlive-default-updmap.cfg
-  (origin
-    (method url-fetch)
-    (uri (string-append "https://tug.org/svn/texlive/tags/"
-                        %texlive-tag "/Master/texmf-dist/web2c/updmap.cfg"
-                        "?revision=" (number->string %texlive-revision)))
-    (file-name (string-append "updmap.cfg-"
-                              (number->string %texlive-revision)))
-    (sha256
-     (base32
-      "0faqknqxs80qp9ywk0by5k85s0yalg97c4lja4q56lsyblrr4j7i"))))
-
-;; For use in package definitions only
-(define-public texlive-union
+;;; TODO: Add a TeX Live profile hook computing fonts maps (and others?)
+;;; configuration from the packages in the profile, similar to what's done
+;;; below.
+(define-public texlive-updmap.cfg
   (lambda* (#:optional (packages '()))
-    "Return 'texlive-union' package which is a union of PACKAGES and the
-standard LaTeX packages."
+    "Return a 'texlive-updmap.cfg' package which contains the fonts map
+configuration of a base set of packages plus PACKAGES."
     (let ((default-packages (match (package-propagated-inputs texlive-base)
                               (((labels packages) ...) packages))))
-      (package (inherit texlive-base)
-        (name "texlive-union")
-        (build-system trivial-build-system)
+      (package
+        (version (number->string %texlive-revision))
+        (source (origin
+                  (method url-fetch)
+                  (uri (string-append "https://tug.org/svn/texlive/tags/"
+                                      %texlive-tag
+                                      "/Master/texmf-dist/web2c/updmap.cfg"
+                                      "?revision=" version))
+                  (file-name "updmap.cfg")
+                  (sha256
+                   (base32
+                    "0zhpyld702im6352fwp41f2hgfkpj2b4j1kfsjqbkijlcmvb6w2c"))))
+        (name "texlive-updmap.cfg")
+        (build-system copy-build-system)
         (arguments
-         '(#:modules ((guix build union)
+         '(#:modules ((guix build copy-build-system)
                       (guix build utils)
-                      (guix build texlive-build-system)
-                      (guix build gnu-build-system)
-                      (guix build gremlin)
-                      (guix elf))
-           #:builder
-           (begin
-             (use-modules (ice-9 match)
-                          (ice-9 popen)
-                          (srfi srfi-26)
-                          (guix build union)
-                          (guix build utils)
-                          (guix build texlive-build-system))
-             (let* ((out       (assoc-ref %outputs "out"))
-                    (texmf.cnf (string-append out "/share/texmf-dist/web2c/texmf.cnf")))
-               ;; Build a modifiable union of all inputs (but exclude bash and
-               ;; the updmap.cfg file)
-               (match (filter (match-lambda
-                                ((name . _)
-                                 (not (member name '("bash"
-                                                     "coreutils"
-                                                     "sed"
-                                                     "updmap.cfg")))))
-                              %build-inputs)
-                 (((names . directories) ...)
-                  (union-build (assoc-ref %outputs "out")
-                               directories
-                               #:create-all-directories? #t
-                               #:log-port (%make-void-port "w"))))
-
-               ;; The configuration file "texmf.cnf" is provided by the
-               ;; "texlive-bin" package.  We take it and override only the
-               ;; setting for TEXMFROOT and TEXMF.  This file won't be consulted
-               ;; by default, though, so we still need to set TEXMFCNF.
-               (substitute* texmf.cnf
-                 (("^TEXMFROOT = .*")
-                  (string-append "TEXMFROOT = " out "/share\n"))
-                 (("^TEXMF = .*")
-                  "TEXMF = $TEXMFROOT/share/texmf-dist\n"))
-               (setenv "PATH" (string-append
-                               (assoc-ref %build-inputs "bash") "/bin:"
-                               (assoc-ref %build-inputs "coreutils") "/bin:"
-                               (assoc-ref %build-inputs "sed") "/bin:"
-                               (string-append out "/bin")))
-               (for-each
-                (cut wrap-program <>
-                     `("TEXMFCNF" ":" suffix (,(dirname texmf.cnf)))
-                     `("TEXMF"    ":" suffix (,(string-append out "/share/texmf-dist"))))
-                (find-files (string-append out "/bin") ".*"))
-
-               ;; Remove invalid maps from config file.
-               (let ((web2c (string-append out "/share/texmf-config/web2c/"))
-                     (maproot (string-append out "/share/texmf-dist/fonts/map/")))
-                 (mkdir-p web2c)
-                 (copy-file
-                  (assoc-ref %build-inputs "updmap.cfg")
-                  (string-append web2c "updmap.cfg"))
-                 (make-file-writable (string-append web2c "updmap.cfg"))
+                      (ice-9 popen)
+                      (ice-9 textual-ports))
+           #:install-plan '(("updmap.cfg" "share/texmf-config/web2c/")
+                            ("map" "share/texmf-dist/fonts/map"))
+           #:phases
+           (modify-phases %standard-phases
+             (add-before 'install 'regenerate-updmap.cfg
+               (lambda _
+                 (make-file-writable "updmap.cfg")
 
+                 ;; Disable unavailable map files.
                  (let* ((port (open-pipe* OPEN_WRITE "updmap-sys"
                                           "--syncwithtrees"
                                           "--nohash"
-                                          (string-append "--cnffile=" web2c "updmap.cfg"))))
+                                          "--cnffile" "updmap.cfg")))
                    (display "Y\n" port)
                    (when (not (zero? (status:exit-val (close-pipe port))))
                      (error "failed to filter updmap.cfg")))
+
+                 ;; Set TEXMFSYSVAR to a sane and writable value; updmap fails
+                 ;; if it cannot create its log file there.
+                 (setenv "TEXMFSYSVAR" (getcwd))
+
                  ;; Generate maps.
                  (invoke "updmap-sys"
-                         (string-append "--cnffile=" web2c "updmap.cfg")
-                         (string-append "--dvipdfmxoutputdir="
-                                        maproot "dvipdfmx/updmap/")
-                         (string-append "--dvipsoutputdir="
-                                        maproot "dvips/updmap/")
-                         (string-append "--pdftexoutputdir="
-                                        maproot "pdftex/updmap/"))
-                 ;; Having this file breaks all file lookups later.
-                 (delete-file (string-append out "/share/texmf-dist/ls-R")))
-               #t))))
-        (inputs
-         `(("bash" ,bash)
-           ,@(map (lambda (package)
-                    (list (package-name package) package))
-                  (append default-packages packages))))
-        (native-inputs
-         `(("coreutils" ,coreutils)
-           ("sed" ,sed)
-           ("updmap.cfg"
-            ,(origin
-               (method url-fetch)
-               (uri (string-append "https://tug.org/svn/texlive/tags/"
-                                   %texlive-tag "/Master/texmf-dist/web2c/updmap.cfg"
-                                   "?revision=" (number->string %texlive-revision)))
-               (file-name (string-append "updmap.cfg-"
-                                         (number->string %texlive-revision)))
-               (sha256
-                (base32
-                 "0faqknqxs80qp9ywk0by5k85s0yalg97c4lja4q56lsyblrr4j7i"))))))
+                         "--cnffile"           "updmap.cfg"
+                         "--dvipdfmxoutputdir" "map/dvipdfmx/updmap/"
+                         "--dvipsoutputdir"    "map/dvips/updmap/"
+                         "--pdftexoutputdir"   "map/pdftex/updmap/"))))))
+        (propagated-inputs (map (lambda (package)
+                                  (list (package-name package) package))
+                                (append default-packages packages)))
         (home-page (package-home-page texlive-bin))
-        (synopsis "Union of TeX Live packages")
-        (description "This package provides a subset of the TeX Live
-distribution.")
-        (license (fold (lambda (package result)
-                         (match (package-license package)
-                           ((lst ...)
-                            (append lst result))
-                           ((? license:license? license)
-                            (cons license result))))
-                       '()
-                       (append default-packages packages)))))))
+        (synopsis "TeX Live fonts map configuration")
+        (description "This package contains the fonts map configuration file
+generated for the base TeX Live packages as well as, optionally, user-provided
+ones.")
+        (license (delete-duplicates
+                  (fold (lambda (package result)
+                          (match (package-license package)
+                            ((lst ...)
+                             (append lst result))
+                            ((? license:license? license)
+                             (cons license result))))
+                        '()
+                        (append default-packages packages))))))))
+
+(define-deprecated/alias texlive-union texlive-updmap.cfg)
+(export texlive-union)
 
 ;; For use in package definitions only
 (define-public texlive-tiny
   (package
-    (inherit (texlive-union))
+    (inherit (texlive-updmap.cfg))
     (name "texlive-tiny")
     (description "This is a very limited subset of the TeX Live distribution.
 It includes little more than the required set of LaTeX packages.")))
@@ -3802,7 +4132,7 @@ It includes little more than the required set of LaTeX packages.")))
                     "/fonts/type1/public/tipa/"
                     "/tex/latex/tipa/")
               (base32
-               "1h53dscv8z6fsa0ax5dys3x11b2f1g60l22hpdf7c88cvdhcs8sn")
+               "0cqzf8vb10b8jw99m9gflskxa4c3rpiznxglix6chl5lai5sgw44")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/tipa")
     (synopsis "Fonts and macros for IPA phonetics characters")
@@ -3945,7 +4275,7 @@ package.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1zyl2pcz2x529gzj5m93a1s4ipymdabf7qdjl3l1673pizd4hfyv"))))
+                "0rhn74ywv000b89w8qjf1i0qsk6kd1mjapfwis14jwjvbjqgvj95"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/draftwatermark"))
     (home-page "https://www.ctan.org/pkg/draftwatermark")
@@ -4009,6 +4339,37 @@ for a variety of alignment purposes, as is evidenced by the examples in
 also provided.")
     (license license:lppl1.3+)))
 
+(define-public texlive-latex-etoc
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-etoc"
+              '("/doc/latex/etoc/README.md"
+                "/doc/latex/etoc/etoc.pdf"
+                "/tex/latex/etoc/")
+              (base32
+               "0198cn75m1y8ggbfv1qlnif0d9275f6mxqsansyqw4np0rv6q9sv")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/etoc")
+    (synopsis "Completely customisable TOCs")
+    (description
+     "This package gives the user complete control of how the entries of
+the table of contents should be constituted from the name, number, and page
+number of each sectioning unit.  The layout is controlled by the definition
+of ‘line styles’ for each sectioning level used in the document.
+
+The package provides its own custom line styles (which may be used as
+examples), and continues to support the standard formatting inherited from
+the LaTeX document classes, but the package can also allow the user to
+delegate the details to packages dealing with list making environments (such
+as enumitem).  The package’s default global style typesets tables of contents
+in a multi-column format, with either a standard heading, or a ruled title
+(optionally with a frame around the table).
+
+The @code{\\tableofcontents} command may be used arbitrarily many times in
+the same document, while @code{\\localtableofcontents} provides a ‘local’
+table of contents.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-expdlist
   (package
     (name "texlive-latex-expdlist")
@@ -4063,8 +4424,23 @@ mode.  The functionality is provided by purely expandable macros or by faster
 but non-expandable ones.")
     (license license:lppl1.3+)))
 
-(define-public texlive-latex-filemod
-  (deprecated-package "texlive-latex-filemod" texlive-filemod))
+(define-deprecated-package texlive-latex-filemod texlive-filemod)
+
+(define-public texlive-latex-hanging
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-hanging"
+              '("/tex/latex/hanging/")
+              (base32
+               "0s86yaxyfv9zxf4svwg9s13by9vrw38apfg0hsfchsimsdd6gsbb")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/hanging")
+    (synopsis "Typeset hanging paragraphs")
+    (description
+     "The @code{hanging} package facilitates the typesetting of hanging
+paragraphs.  The package also enables typesetting with hanging punctuation,
+by making punctuation characters active.")
+    (license license:lppl1.3c+)))
 
 (define-public texlive-latex-ifplatform
   (package
@@ -4115,6 +4491,42 @@ that are compatible with @code{natbib}: @code{plainnat}, @code{unsrtnat},
 designed from the start to be compatible with @code{natbib}.")
     (license license:lppl)))
 
+(define-public texlive-latex-newunicodechar
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-newunicodechar"
+              '("/doc/latex/newunicodechar/" "/tex/latex/newunicodechar/")
+              (base32
+               "0pwx3ylhvk5hxjnalas00grrbwla79j424i27hrm0zgflq7wsbrj")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/newunicodechar")
+    (synopsis "Definitions of the meaning of Unicode characters")
+    (description
+     "This package provides a friendly interface for defining the meaning of
+Unicode characters.  The document should be processed by (pdf)LaTeX with the
+Unicode option of @code{inputenc} or @code{inputenx}, or by XeLaTeX/LuaLaTeX.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-latex-pdftexcmds
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-pdftexcmds"
+              '("/doc/generic/pdftexcmds/"
+                "/tex/generic/pdftexcmds/")
+              (base32
+               "1hph0djbfc8hlwfc41rzlf8l3ccyyvc0n7a0qdrr9881jwd6iv1b")
+              #:trivial? #t))
+    (propagated-inputs
+     `(("texlive-generic-iftex" ,texlive-generic-iftex)
+       ("texlive-generic-infwarerr" ,texlive-generic-infwarerr)
+       ("texlive-generic-ltxcmds" ,texlive-generic-ltxcmds)))
+    (home-page "https://www.ctan.org/pkg/pdftexcmds")
+    (synopsis "LuaTeX support for pdfTeX utility functions")
+    (description
+     "This package makes a number of utility functions from pdfTeX
+available for luaTeX by reimplementing them using Lua.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-psfrag
   (package
     (name "texlive-latex-psfrag")
@@ -4151,11 +4563,11 @@ rotated.")
               #:trivial? #t))
     (propagated-inputs
      `(("texlive-latex-bigfoot" ,texlive-latex-bigfoot) ; for suffix
-       ("texlive-latex-filemod" ,texlive-latex-filemod)
+       ("texlive-filemod" ,texlive-filemod)
        ("texlive-latex-graphics" ,texlive-latex-graphics)
        ("texlive-latex-ifplatform" ,texlive-latex-ifplatform)
        ("texlive-latex-l3kernel" ,texlive-latex-l3kernel) ; for expl3
-       ("texlive-latex-oberdiek" ,texlive-latex-oberdiek)
+       ("texlive-oberdiek" ,texlive-oberdiek)
        ("texlive-latex-psfrag" ,texlive-latex-psfrag)
        ("texlive-latex-tools" ,texlive-latex-tools) ; for shellesc
        ("texlive-latex-trimspaces" ,texlive-latex-trimspaces)
@@ -4169,8 +4581,26 @@ drastically speeding up compilation time when only a single figure needs
 re-processing.")
     (license license:lppl)))
 
-(define-public texlive-latex-pstool
-  (deprecated-package "texlive-latex-pstool" texlive-pstool))
+(define-deprecated-package texlive-latex-pstool texlive-pstool)
+
+(define-public texlive-latex-refcount
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-refcount"
+              (list "/doc/latex/refcount/"
+                    "/tex/latex/refcount/")
+              (base32
+               "0pkmqj2qihndlv3ks33xzqw91q46jx79r3aygj68d8dflyddi583")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/refcount")
+    (synopsis "Counter operations with label references")
+    (description
+     "This package provides the @code{\\setcounterref} and
+@code{\\addtocounterref} commands which use the section (or other) number
+from the reference as the value to put into the counter.  It also provides
+@code{\\setcounterpageref} and @code{\\addtocounterpageref} that do the
+corresponding thing with the page reference of the label.")
+    (license license:lppl1.3c+)))
 
 (define-public texlive-seminar
   (package
@@ -4192,8 +4622,41 @@ recent classes such as powerdot or beamer, both of which are tuned to
 21st-century presentation styles.")
     (license license:lppl1.2+)))
 
-(define-public texlive-latex-seminar
-  (deprecated-package "texlive-latex-seminar" texlive-seminar))
+(define-deprecated-package texlive-latex-seminar texlive-seminar)
+
+(define-public texlive-latex-stackengine
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-stackengine"
+              (list "/doc/latex/stackengine/"
+                    "/tex/latex/stackengine/")
+              (base32
+               "1rbw3dmb6kl3wlnpxacr8cmp2ivac1kpnb33k7r5s3lp1q59ck38")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/stackengine")
+    (synopsis "Customised stacking of objects")
+    (description
+     "The package provides a versatile way to stack objects vertically in a
+variety of customizable ways.  A number of useful macros are provided, all
+of which make use of the @code{stackengine} core.")
+    (license license:lppl1.3+)))
+
+(define-public texlive-latex-tocloft
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-tocloft"
+              '("/doc/latex/tocloft/" "/tex/latex/tocloft/")
+              (base32
+               "0mg3hpzq7wpm6mnnvb0rp3wby56zyxkyai8d2h3f4vk93zrc6awk")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/tocloft")
+    (synopsis "Control table of contents")
+    (description
+     "This package provides control over the typography of the
+@dfn{Table of Contents}, @dfn{List of Figures} and @dfn{List of Tables},
+and the ability to create new ‘List of ...’. The ToC @code{\\parskip} may
+be changed. ")
+    (license license:lppl1.3c+)))
 
 (define-public texlive-latex-trimspaces
   (package
@@ -4283,8 +4746,7 @@ hyperlink to the target of the DOI.")
     ;; Any version of the LPPL.
     (license license:lppl1.3+)))
 
-(define-public texlive-latex-doi
-  (deprecated-package "texlive-latex-doi" texlive-doi))
+(define-deprecated-package texlive-latex-doi texlive-doi)
 
 (define-public texlive-etoolbox
   (package
@@ -4293,7 +4755,7 @@ hyperlink to the target of the DOI.")
               (list "/doc/latex/etoolbox/"
                     "/tex/latex/etoolbox/")
               (base32
-               "1cc1vw1ach55g4ff4x30by8k1mg01w199ccxvn72f5khlnnxial0")
+               "070iaj540rglf0c80l0hjkwg6aa7qyskhh4iwyhf7n8vrg5cjjab")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/etoolbox")
     (synopsis "e-TeX tools for LaTeX")
@@ -4307,8 +4769,7 @@ some LaTeX kernel commands; nevertheless, the package will not modify any part
 of the LaTeX kernel.")
     (license license:lppl1.3+)))
 
-(define-public texlive-latex-etoolbox
-  (deprecated-package "texlive-latex-etoolbox" texlive-etoolbox))
+(define-deprecated-package texlive-latex-etoolbox texlive-etoolbox)
 
 (define-public texlive-latex-fncychap
   (package
@@ -4468,11 +4929,11 @@ BibLaTeX, and is considered experimental.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0a8f38c2ds1flxcr0apdpyaaz3k6fyalz6dkbrmcv9srjc40mh3n"))))
+                "0a9nrmiwksnpa6iaapirqid974ai56qgin2n4h9mggy9v8gp7r71"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/geometry"))
     (propagated-inputs
-     `(("texlive-latex-oberdiek" ,texlive-latex-oberdiek))) ;for ifpdf
+     `(("texlive-oberdiek" ,texlive-oberdiek))) ;for ifpdf
     (home-page "https://www.ctan.org/pkg/geometry")
     (synopsis "Flexible and complete interface to document dimensions")
     (description
@@ -4519,7 +4980,7 @@ array environments; verbatim handling; and syntax diagrams.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0na7v4hsyx5s67cpjj2dbnq8j67k8lln6b19hmj631gfs27slss1"))))
+                "1ci6hr8hx4g2x359n6wqvw6w8fv42cjjpzxxxd3pn6av5nkaiav3"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/polyglossia"))
     (home-page "https://www.ctan.org/pkg/polyglossia")
@@ -4539,7 +5000,7 @@ and XeLaTeX; it relies on the @code{fontspec} package, version 2.0 at least.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "14b2bc7cqz4ckxxycim9sw6jkrr1pahivm1rdbpz5k6hl967w1s3"))))
+                "19fd0bqxjkzc16bza3w20pnsc90gbhbllm244b3h6sink4dlnn54"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/supertabular"))
     (home-page "https://www.ctan.org/pkg/supertabular")
@@ -4565,7 +5026,7 @@ situations where longtable has problems.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "16jy02m089m7n6v9vbfi4xjgngc1fnvsmmppk8axfwzbhdky3c9c"))))
+                "1qcmcsxdsibca0mad559vhz36xaxsbkivgv1hc98vdyd90fg4y31"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -4659,7 +5120,7 @@ considered obsolete; alternatives are the @code{typearea} package from the
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0rxfpr8vq3brwx5rc7qn91ixlp9zva4zrms8a579fqa1g5yva7vg"))))
+                "1gc2brr2rs495w7qi6spdva1xrza94x7a36dncjdkghnsq8r92h4"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/appendix"))
     (home-page "https://www.ctan.org/pkg/appendix")
@@ -4672,6 +5133,23 @@ environment is provided which can be used instead of the @code{\\appendix}
 command.")
     (license license:lppl)))
 
+(define-public texlive-latex-bookmark
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-bookmark"
+              (list "/doc/latex/bookmark/"
+                    "/tex/latex/bookmark/")
+              (base32
+               "0xwjdah0p4an0fknvgj9y5phl62sf522z6570pvy6c09hkz0j4h1")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/bookmark")
+    (synopsis "Bookmark (outline) organization for hyperref")
+    (description
+     "This package implements a new bookmark (outline) organization for the
+@code{hyperref} package.  Bookmark properties such as style and color.  Other
+action types are available (URI, GoToR, Named).")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-changebar
   (package
     (name "texlive-latex-changebar")
@@ -4709,7 +5187,7 @@ drivers, and VTeX and pdfTeX.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1s1rv6zgw105w2j6ffhnk914qrix87y1ndzri1q72g2kbr91zlbg"))))
+                "0m4r52gw9vwsi1pzwh0cy03jxhwizymi4a2fj3jfs5rrvh105r5y"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -4739,7 +5217,7 @@ copy-and-paste functions work properly.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "16vd99p01a0y30xr5yf1z2j5da9x8gy21vb30wk08jh31zffbaqj"))))
+                "1qa0mh0fy9hcvfsmprv6q50q0qzdjjfbxi3axap26z6zg3qj68bc"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/colortbl"))
     (home-page "https://www.ctan.org/pkg/colortbl")
@@ -4798,7 +5276,7 @@ floats, center, flushleft, and flushright, lists, and pages.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0hrwspqkqfahxyzzsnjyrxlgxj06zw1f3636gx76pvl4xhvdj1cj"))))
+                "1h2zv7cps0pknqhy2dyfclyi002lmsfshm0rn6ywfl9p4fnvh0bc"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -4866,6 +5344,24 @@ the same place.  The package also has a range of techniques for labelling
 footnotes with symbols rather than numbers.")
     (license license:lppl1.3+)))
 
+(define-public texlive-latex-letltxmacro
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-letltxmacro"
+              (list "/doc/latex/letltxmacro/"
+                    "/tex/latex/letltxmacro/")
+              (base32
+               "0yy1m1jiyxq2pssp0pidaa2swx6lyxw3zwpm2r8m0v2r3lvsyyxx")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/letltxmacro")
+    (synopsis "Let assignment for macros")
+    (description
+     "TeX’s @code{\\let} assignment does not work for LaTeX macros with
+optional arguments, or for macros that are defined as robust macros by
+@code{\\DeclareRobustCommand}.  This package defines @code{\\LetLtxMacro}
+that also takes care of the involved internal macros.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-listings
   (package
     (name "texlive-latex-listings")
@@ -4876,7 +5372,7 @@ footnotes with symbols rather than numbers.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1fbrhqj22vzakn30j71fc41l8nliqbv1dmxm0zlwi2qjjbq6fwav"))))
+                "082zri3gp8s6p2difhk1pbix2vzmvsf6fmld2z78v35xwk3fiya0"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/listings"
@@ -4929,6 +5425,25 @@ transliterate semitic languages; patches to make (La)TeX formulae embeddable
 in SGML; use maths minus in text as appropriate; simple Young tableaux.")
     (license license:gpl2)))
 
+(define-public texlive-latex-kvoptions
+  (package
+    (inherit (simple-texlive-package
+              "texlive-latex-kvoptions"
+              (list "/doc/latex/kvoptions/"
+                    "/tex/latex/kvoptions/")
+              (base32
+               "02i4n2n3j4lg68d3nam08m63kb4irc99wfhyc2z51r02lm1wwmvw")
+              #:trivial? #t))
+    (propagated-inputs
+     `(("texlive-generic-kvsetkeys" ,texlive-generic-kvsetkeys)
+       ("texlive-generic-ltxcmds" ,texlive-generic-ltxcmds)))
+    (home-page "https://www.ctan.org/pkg/kvoptions")
+    (synopsis "Key/value format for package options")
+    (description
+     "This package provides facilities for using key-value format in
+package options.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-fonts-ec
   (package
     (name "texlive-fonts-ec")
@@ -4956,7 +5471,7 @@ in SGML; use maths minus in text as appropriate; simple Young tableaux.")
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+             (let ((mf (assoc-ref inputs "texlive-metafont")))
                ;; Tell mf where to find mf.base
                (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                ;; Tell mf where to look for source files
@@ -4991,7 +5506,7 @@ in SGML; use maths minus in text as appropriate; simple Young tableaux.")
                #t))))))
     (native-inputs
      `(("texlive-bin" ,texlive-bin)
-       ("texlive-metafont-base" ,texlive-metafont-base)
+       ("texlive-metafont" ,texlive-metafont)
        ("texlive-cm" ,texlive-cm)))
     (home-page "https://www.ctan.org/pkg/ec")
     (synopsis "Computer modern fonts in T1 and TS1 encodings")
@@ -5049,7 +5564,7 @@ via the CM-super, Latin Modern and (in a restricted way) CM-LGC font sets.")
                     "/fonts/type1/public/inconsolata/"
                     "/tex/latex/inconsolata/")
               (base32
-               "1a77w26m4c4j0202s1qkikz7ha6cxlv8zxhzi9s3l0x1l2pl7cr2")
+               "19lvma52vk7x8d7j4s9ymjwm3w2k08860fh6dkzn76scgpdm4wlb")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/inconsolata")
     (synopsis "Monospaced font with support files for use with TeX")
@@ -5088,8 +5603,7 @@ Adobe's basic set.")
     ;; No license version specified.
     (license license:gpl3+)))
 
-(define-public texlive-fonts-adobe-times
-  (deprecated-package "texlive-fonts-adobe-times" texlive-times))
+(define-deprecated-package texlive-fonts-adobe-times texlive-times)
 
 (define-public texlive-palatino
   (package
@@ -5117,8 +5631,7 @@ Adobe's basic set.")
     ;; No license version specified.
     (license license:gpl3+)))
 
-(define-public texlive-fonts-adobe-palatino
-  (deprecated-package "texlive-fonts-adobe-palatino" texlive-palatino))
+(define-deprecated-package texlive-fonts-adobe-palatino texlive-palatino)
 
 (define-public texlive-zapfding
   (package
@@ -5143,8 +5656,7 @@ Adobe's basic set.")
     ;; No license version specified.
     (license license:gpl3+)))
 
-(define-public texlive-fonts-adobe-zapfding
-  (deprecated-package "texlive-fonts-adobe-zapfding" texlive-zapfding))
+(define-deprecated-package texlive-fonts-adobe-zapfding texlive-zapfding)
 
 (define-public texlive-fonts-rsfs
   (package
@@ -5173,7 +5685,7 @@ Adobe's basic set.")
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((mf (assoc-ref inputs "texlive-metafont-base")))
+             (let ((mf (assoc-ref inputs "texlive-metafont")))
                ;; Tell mf where to find mf.base
                (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                ;; Tell mf where to look for source files
@@ -5208,7 +5720,7 @@ Adobe's basic set.")
                #t))))))
     (native-inputs
      `(("texlive-bin" ,texlive-bin)
-       ("texlive-metafont-base" ,texlive-metafont-base)
+       ("texlive-metafont" ,texlive-metafont)
        ("texlive-cm" ,texlive-cm)))
     (home-page "https://www.ctan.org/pkg/rsfs")
     (synopsis "Ralph Smith's Formal Script font")
@@ -5231,7 +5743,7 @@ one of the packages @code{calrsfs} and @code{mathrsfs}.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0y2y08kr3w6asm9lblj9yywqmhaal36fq71zzcbfsc7cvwf641q7"))))
+                "12f7pbhiav4iz3rra5vq85v9f14h8j1ybi42kvnkzgjsay87p7gf"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/eso-pic"))
     (home-page "https://www.ctan.org/pkg/eso-pic")
@@ -5293,7 +5805,7 @@ splines, and filled circles and ellipses.  The package uses @code{tpic}
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1vm9xp67hzif0pqab4r3ialf0cyhi0fa4p8kxgp1ymcf85pqip14"))))
+                "1j8svflnx9w897mdavyf1f0n256wh4bbclrhv5vx7b501gmlbp7d"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5325,7 +5837,7 @@ in the form @code{key=value} are available, for example:
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "07vbcp6avdwldr870cwf65av2s9lfyzcpp8gpld53yw6lcxgaipj"))))
+                "1kak9i6nwz6vc4xjj6lbvkb69s49pis6qynjzvsjraxbdw28y2dq"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/multirow"))
     (home-page "https://www.ctan.org/pkg/multirow")
@@ -5350,7 +5862,7 @@ entry at the \"natural\" width of its text.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1pr6ym3ad7x14ng7gmhsmywh3685d2cnm5qgyrqbigng2r6fcc1k"))))
+                "1ygsr0rsdabj61zask3346xrwiphz5i6f1nfb9k4d3234psh09kb"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5386,7 +5898,7 @@ positions; a grid for orientation is available.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0j1fhm1m9k6rz80lmch3x44g20y9nm4abaaf8czb0q8hzwlx5aq5"))))
+                "1zll8jci8lsd7y44j567akf6y8fp2p7qq23rs527zhr0br9mn3sh"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5416,7 +5928,7 @@ designed class) helps alleviate this untidiness.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0s4izcah7im67889qz4d26pcfpasmm35sj1rw4ragkkdk3rlbbbd"))))
+                "140kl8r7g2ak2frjn5pmwiwibfynyfwp897r9vk8pypmn390lzr2"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/pdfpages"))
     (home-page "https://www.ctan.org/pkg/pdfpages")
@@ -5430,38 +5942,47 @@ package supports pdfTeX (pdfLaTeX) and VTeX.  With VTeX it is even possible to
 use this package to insert PostScript files, in addition to PDF files.")
     (license license:lppl1.3+)))
 
-(define-public texlive-fonts-stmaryrd
-  (package
-    (name "texlive-fonts-stmaryrd")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "fonts" "stmaryrd"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "08pn4ca3vl6qm9l3wm5h5iyjsrg411kkm1yana329xwg2j14s9n6"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "latex/stmaryrd"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'configure 'patch-ins
-           (lambda _
-             (substitute* "stmaryrd.ins"
-               (("^%% LaTeX2e.*") "\\input docstrip\n")
-               (("fontdef\\}\\}" line)
-                (string-append line "\n\\endbatchfile")))
-             #t)))))
-    (home-page "https://www.ctan.org/pkg/stmaryrd")
-    (synopsis "St Mary Road symbols for theoretical computer science")
-    (description
-     "The fonts were originally distributed as Metafont sources only, but
+(define-public texlive-stmaryrd
+  (let ((template (simple-texlive-package
+                   "texlive-stmaryrd"
+                   (list "/fonts/afm/public/stmaryrd/"
+                         "/fonts/map/dvips/stmaryrd/"
+                         "/fonts/source/public/stmaryrd/"
+                         "/fonts/tfm/public/stmaryrd/"
+                         "/fonts/type1/public/stmaryrd/"
+                         "/source/fonts/stmaryrd/"
+                         "/doc/fonts/stmaryrd/")
+                   (base32
+                    "0yn0yl6x1z9ab5gb56lhvkqabd2agz3ggxifwxkiysrj5780j29z"))))
+    (package
+      (inherit template)
+      (arguments (substitute-keyword-arguments (package-arguments template)
+                   ((#:tex-directory _ #t)
+                    "latex/stmaryrd")
+                   ((#:phases phases)
+                    `(modify-phases ,phases
+                       (add-after 'unpack 'chdir
+                         (lambda _
+                           (chdir "source/fonts/stmaryrd")
+                           #t))
+                       (add-after 'chdir 'patch-ins
+                         (lambda _
+                           (substitute* "stmaryrd.ins"
+                             (("^%% LaTeX2e.*") "\\input docstrip\n")
+                             (("fontdef\\}\\}" line)
+                              (string-append line "\n\\endbatchfile")))
+                           #t))))))
+      (home-page "https://www.ctan.org/pkg/stmaryrd")
+      (synopsis "St Mary Road symbols for theoretical computer science")
+      (description
+       "The fonts were originally distributed as Metafont sources only, but
 Adobe Type 1 versions are also now available.  Macro support is provided for
 use under LaTeX; the package supports the @code{only} option (provided by the
 @code{somedefs} package) to restrict what is loaded, for those who don't need
 the whole font.")
-    (license license:lppl)))
+      (license license:lppl))))
+
+(define-deprecated-package texlive-fonts-stmaryrd texlive-stmaryrd)
 
 (define-public texlive-latex-subfigure
   (package
@@ -5586,8 +6107,7 @@ TeX metrics (VF and TFM files) and macros for use with LaTeX.")
     ;; Any version of the GPL with font exception.
     (license license:gpl3+)))
 
-(define-public texlive-fonts-txfonts
-  (deprecated-package "texlive-fonts-txfonts" texlive-txfonts))
+(define-deprecated-package texlive-fonts-txfonts texlive-txfonts)
 
 (define-public texlive-fonts-iwona
   (package
@@ -5636,13 +6156,11 @@ of ink traps which typify the Kurier font.")
     (inherit (simple-texlive-package
               "texlive-jknappen"
               (list "/fonts/source/jknappen/"
-                    "/fonts/tfm/jknappen/"
-                    "/fonts/source/jknappen/"
                     "/fonts/tfm/jknappen/"
                     "/tex4ht/ht-fonts/alias/jknappen/"
                     "/tex4ht/ht-fonts/unicode/jknappen/")
               (base32
-               "1v5wk5il41bddzr81h5636h3cjz0w1qann5g9garsb7qfch9fhws")
+               "0xvy3c845jc7iw1h9rcm1r2yvm1ni1sm9r9k9j2cfc82xy43rwij")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/jknappen")
     (synopsis "Miscellaneous packages by Jörg Knappen")
@@ -5681,6 +6199,90 @@ Simple Young tableaux.
 @end table")
     (license license:gpl2)))                    ;per the 00readme_txt file.
 
+(define-public texlive-jadetex
+  (let ((template (simple-texlive-package
+                   "texlive-jadetex"
+                   (list "/doc/man/man1/jadetex.1"
+                         "/doc/man/man1/jadetex.man1.pdf"
+                         "/doc/man/man1/pdfjadetex.1"
+                         "/doc/man/man1/pdfjadetex.man1.pdf"
+                         "/source/jadetex/base/"
+                         ;; The following files are not generated from
+                         ;; sources.
+                         "/tex/jadetex/base/jadetex.ini"
+                         "/tex/jadetex/base/pdfjadetex.ini"
+                         "/tex/jadetex/base/uentities.sty")
+                   (base32
+                    "03chyc3vjqgxcj985gy4k0bd0lf1n4a6sgbhc7k84jparjk3hx4i"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "jadetex/base")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'unify-source-directory
+               (lambda _
+                 (chdir "source/jadetex/base")
+                 (for-each (lambda (f)
+                             (copy-file f (basename f)))
+                           (find-files "../../../tex/jadetex/base"))
+                 #t))
+             (add-after 'build 'generate-formats
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (mkdir "web2c")
+                 (for-each (lambda (f)
+                             (symlink f (basename f)))
+                           (find-files "build"))
+                 (invoke "fmtutil-sys" "--byfmt" "jadetex"
+                         "--fmtdir=web2c")
+                 (invoke "fmtutil-sys" "--byfmt" "pdfjadetex"
+                         "--fmtdir=web2c")))
+             (add-after 'install 'install-formats-and-wrappers
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (texlive-bin (assoc-ref inputs "texlive-bin"))
+                        (pdftex (string-append texlive-bin "/bin/pdftex"))
+                        (web2c (string-append out "/share/texmf-dist/web2c")))
+                   (mkdir-p web2c)
+                   (copy-recursively "web2c" web2c)
+                   ;; Create convenience command wrappers.
+                   (mkdir-p (string-append out "/bin"))
+                   (symlink pdftex (string-append out "/bin/jadetex"))
+                   (symlink pdftex (string-append out "/bin/pdfjadetex"))
+                   #t)))))))
+      (propagated-inputs
+       ;; Propagate the texlive-updmap.cfg input used by xmltex, which provides the
+       ;; required fonts for its use.
+       `(("texlive-xmltex" ,texlive-xmltex)
+         ("texlive-kpathsea" ,texlive-kpathsea))) ;for fmtutil.cnf template
+      (native-inputs
+       `(("texlive-cm" ,texlive-cm)     ;for cmex10 and others
+         ("texlive-fonts-latex" ,texlive-fonts-latex) ;for lasy6
+         ;; The t1cmr.fd file of texlive-latex-base refers to the ecrm font,
+         ;; provided by the jknappen package collection.
+         ("texlive-jknappen" ,texlive-jknappen)
+         ("texlive-generic-ulem" ,texlive-generic-ulem)
+         ("texlive-hyperref" ,texlive-hyperref)
+         ("texlive-latex-colortbl" ,texlive-latex-colortbl)
+         ("texlive-latex-fancyhdr" ,texlive-latex-fancyhdr)
+         ("texlive-latex-graphics" ,texlive-latex-graphics) ;for color.sty
+         ("texlive-latex-tools" ,texlive-latex-tools)       ;for array.sty
+         ("texlive-marvosym" ,texlive-marvosym)
+         ("texlive-tex-ini-files" ,texlive-tex-ini-files))) ;for pdftexconfig
+      (home-page "https://www.ctan.org/pkg/jadetex/")
+      (synopsis "TeX macros to produce TeX output using OpenJade")
+      (description "JadeTeX is a companion package to the OpenJade DSSSL
+processor.  OpenJade applies a DSSSL stylesheet to an SGML or XML document.
+The output of this process can be in a number of forms, including a set of
+high level LaTeX macros.  It is the task of the JadeTeX package to transform
+these macros into DVI/PostScript (using the @command{jadetex} command) or
+Portable Document Format (PDF) form (using the @command{pdfjadetex}
+command).")
+      ;; The license text is found at the header of the jadetex.dtx file.
+      (license license:expat))))
+
 (define-public texlive-libertine
   (package
     (inherit (simple-texlive-package
@@ -5696,7 +6298,7 @@ Simple Young tableaux.
 
                     "/tex/latex/libertine/")
               (base32
-               "1v2vimpfi0b08sd79dadrck7wkpa0bphiakwyvhjc3ygq9k5bp8k")
+               "1d5r80isyvs2v3i8pzlhsn7ns6bn8ldkbs82g25widraixlhg6yg")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/libertine")
     (synopsis "Use Linux Libertine and Biolinum fonts with LaTeX")
@@ -5754,7 +6356,7 @@ LGR.  The package doesn't (currently) support mathematics.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "04nmkhqx6jxcxx9a30zbcd5smxi5fd0cbp132bki7fnvhspnhg21"))))
+                "1kw7dvxvdfbf31zw0n8r0g5xak3vcdf25n33fqw93j59zpc5nvbl"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5805,23 +6407,32 @@ now contains a package @code{fix-cm},f which performs the task of
 @code{ec} fonts.")
     (license license:lppl)))
 
-(define-public texlive-latex-lh
-  (package
-    (name "texlive-latex-lh")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "lh"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "00gdiwh3sfhh1iimjhpja7lm7k4vzqzql2irgwnpz94qvh25zwi5"))))
-    (build-system texlive-build-system)
-    (arguments '(#:tex-directory "latex/lh"))
-    (home-page "https://www.ctan.org/pkg/lh")
-    (synopsis "Cyrillic fonts that support LaTeX standard encodings")
-    (description
-     "The LH fonts address the problem of the wide variety of alphabets that
+(define-public texlive-lh
+  (let ((template (simple-texlive-package
+                   "texlive-lh"
+                   (list "/doc/fonts/lh/"
+                         "/source/fonts/lh/"
+                         "/source/latex/lh/"
+                         "/fonts/source/lh/"
+                         "/tex/plain/lh/")
+                   (base32
+                    "0vw75i52asi5sssp8k9r8dy4ihvqbvmbsl3dini3ls8cky15lz37"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/lh")
+         ((#:build-targets _ '())
+          ''("nfssfox.ins" "lcyfonts.ins" "ot2fonts.ins" "t2ccfonts.ins"))
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/lh") #t))))))
+      (home-page "https://www.ctan.org/pkg/lh")
+      (synopsis "Cyrillic fonts that support LaTeX standard encodings")
+      (description
+       "The LH fonts address the problem of the wide variety of alphabets that
 are written with Cyrillic-style characters.  The fonts are the original basis
 of the set of T2* and X2 encodings that are now used when LaTeX users need to
 write in Cyrillic languages.  Macro support in standard LaTeX encodings is
@@ -5830,7 +6441,9 @@ offers support for other (more traditional) encodings.  The fonts, in the
 standard T2* and X2 encodings are available in Adobe Type 1 format, in the
 CM-Super family of fonts.  The package also offers its own LaTeX support for
 OT2 encoded fonts, CM bright shaped fonts and Concrete shaped fonts.")
-    (license license:lppl)))
+      (license license:lppl))))
+
+(define-deprecated-package texlive-latex-lh texlive-lh)
 
 (define-public texlive-marvosym
   (package
@@ -5872,7 +6485,7 @@ the derived Type 1 font, together with support files for TeX (LaTeX).")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1xyd57c8z1xi0kbqpbad61flcazz68i9ssxrag0gjvci3irxi8xh"))))
+                "140k9dz2g2vj5ypgyqx3px9c1y9a820y8kq139p96lw0yk6839aw"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -5901,7 +6514,7 @@ than the bitmaps Metafont creates.")
               (uri (texlive-ref "latex" "acmart"))
               (sha256
                (base32
-                "18rl67p2zhngskisnhv78mksv8q8q658l6igkswzswldixmkpphq"))
+                "12wxav9r6v7dlfja9myrwz7famgfpcfwd292qzmgg283xgngh9kd"))
               (file-name (string-append name "-" version "-checkout"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/acmart"))
@@ -5955,7 +6568,7 @@ get a narrower “natural” width.")
                     "/tex/plain/wasy/"
                     "/doc/fonts/wasy/")
               (base32
-               "10dxbqgv42niybj65hj6y47x8lsl83m48rgw2v2s50k05wbghwbm")
+               "1swzxgld3lndi5q0q6zkwbw06ndh13fvp04as7zpwyhh646s0hbx")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/wasy")
     (synopsis "Waldi symbol fonts")
@@ -5964,9 +6577,9 @@ in the Metafont and Adobe Type 1 formats.  Support under LaTeX is provided by
 the @code{wasysym} package.")
     (license license:public-domain)))
 
-(define-public texlive-latex-wasysym
+(define-public texlive-wasysym
   (package
-    (name "texlive-latex-wasysym")
+    (name "texlive-wasysym")
     (version (number->string %texlive-revision))
     (source (origin
               (method svn-fetch)
@@ -5974,7 +6587,7 @@ the @code{wasysym} package.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1sgwbfwjjf70g54hh93gsd9jp9nm67w6n74x9d72a56n07jbk5hv"))))
+                "0zxcf0pfqf439cfwl0r5dd93b0v4pbiih36n2pwshdlvnmy0nr50"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/wasysym"))
     (home-page "https://www.ctan.org/pkg/wasysym")
@@ -5986,6 +6599,8 @@ male and female symbols and astronomical symbols, as well as the complete
 implements an easy to use interface for these symbols.")
     (license license:lppl)))
 
+(define-deprecated-package texlive-latex-wasysym texlive-wasysym)
+
 (define-public texlive-latex-wrapfig
   (package
     (name "texlive-latex-wrapfig")
@@ -6070,7 +6685,7 @@ package of that name now exists.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1hpsk4yp08qvbl43kqiv0hhwxv3gcqqxcpahyv6ch2b38pbj4bh6"))))
+                "0hnf821yvki9bzfkz79ns9m1msjp3yvd4dhf3268wrpr1zjx6w8v"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/preview"
@@ -6102,7 +6717,7 @@ files.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0jmasg40bk53zdd2jc8nc18jvdai3p2wmamy7hwli8gls4nf25qp"))))
+                "09pd4wynksg1y1ddxnqbhk2dc185zw5nyi794d86n3qx8l014ijy"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/acronym"))
     (home-page "https://www.ctan.org/pkg/acronym")
@@ -6115,49 +6730,33 @@ requires the suffix package, which in turn requires that it runs under
 e-TeX.")
     (license license:lppl1.3+)))
 
-(define-public texlive-generic-pdftex
+(define-public texlive-pdftex
   (package
-    (name "texlive-generic-pdftex")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (svn-reference
-                    (url (string-append "svn://www.tug.org/texlive/tags/"
-                                        %texlive-tag "/Master/texmf-dist/"
-                                        "/tex/generic/pdftex"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0k68zmqzs4qvrqxdwsrawbjb14hxqjfamq649azvai0jjxdpkljd"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((target (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/tex/generic/pdftex"))
-               (target-map (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/fonts/map/pdftex")))
-           (mkdir-p target)
-           (copy-recursively (assoc-ref %build-inputs "source") target)
-           (mkdir-p target-map)
-           (copy-recursively (assoc-ref %build-inputs "pdftex-map") target-map)
-           #t))))
-    (native-inputs
-     `(("pdftex-map"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/fonts/map/pdftex"))
-                 (revision %texlive-revision)))
-           (file-name (string-append name "-map-" version "-checkout"))
-           (sha256
-            (base32
-             "03rfif2631pgd8g1ar4xblcdh078kky7fvw3kfsj5a47rxxgicp2"))))))
+    (inherit (simple-texlive-package
+              "texlive-pdftex"
+              (list "/doc/pdftex/"
+                    "/doc/man/man1/pdftex.1"
+                    "/doc/man/man1/pdfetex.1"
+                    "/fonts/map/dvips/dummy-space/dummy-space.map"
+                    "/fonts/tfm/public/pdftex/dummy-space.tfm"
+                    "/fonts/type1/public/pdftex/dummy-space.pfb"
+                    "/scripts/simpdftex/simpdftex"
+                    "/tex/generic/config/pdftex-dvi.tex"
+                    "/tex/generic/pdftex/glyphtounicode.tex"
+                    "/tex/generic/pdftex/pdfcolor.tex")
+              (base32
+               "1wx928rqsv0x1a8vc7aq49w3nglr4bmlhl822slqglymfxrmb91b")
+              #:trivial? #t))
+    ;; TODO: add this missing package:
+    ;; dehyph
+    (propagated-inputs
+     `(("texlive-cm" ,texlive-cm)
+       ("texlive-etex" ,texlive-etex)
+       ("texlive-fonts-knuth-lib" ,texlive-fonts-knuth-lib)
+       ("texlive-hyphen-base" ,texlive-hyphen-base)
+       ("texlive-kpathsea" ,texlive-kpathsea)
+       ("texlive-tex-ini-files" ,texlive-tex-ini-files)
+       ("texlive-tex-plain" ,texlive-tex-plain)))
     (home-page "https://www.ctan.org/pkg/pdftex")
     (synopsis "TeX extension for direct creation of PDF")
     (description
@@ -6165,17 +6764,19 @@ e-TeX.")
 directly generate PDF documents instead of DVI.")
     (license license:gpl2+)))
 
+(define-deprecated-package texlive-generic-pdftex texlive-pdftex)
+
 (define texlive-texmf
   (package
    (name "texlive-texmf")
-   (version "20190410")
+   (version "20210325")
    (source texlive-texmf-src)
    (build-system gnu-build-system)
    (inputs
     `(("texlive-bin" ,texlive-bin)
       ("lua" ,lua)
       ("perl" ,perl)
-      ("python" ,python-2) ; incompatible with Python 3 (print syntax)
+      ("python" ,python)
       ("ruby" ,ruby)
       ("tcsh" ,tcsh)))
    (arguments
@@ -6206,9 +6807,15 @@ directly generate PDF documents instead of DVI.")
                      (share (string-append out "/share"))
                      (texmfroot (string-append share "/texmf-dist/web2c"))
                      (texmfcnf (string-append texmfroot "/texmf.cnf"))
+                     (fmtutilcnf (string-append texmfroot "/fmtutil.cnf"))
                      (texlive-bin (assoc-ref inputs "texlive-bin"))
                      (texbin (string-append texlive-bin "/bin"))
                      (tlpkg (string-append texlive-bin "/share/tlpkg")))
+                ;; LuaJIT is not ported to powerpc64* yet.
+                (if ,(target-ppc64le?)
+                    (substitute* fmtutilcnf
+                      (("^(luajittex|luajithbtex|mfluajit)" m)
+                       (string-append "#! " m))))
                 ;; Register SHARE as TEXMFROOT in texmf.cnf.
                 (substitute* texmfcnf
                   (("TEXMFROOT = \\$SELFAUTOPARENT")
@@ -6245,10 +6852,10 @@ This package contains the complete tree of texmf-dist data.")
 (define-public texlive
   (package
    (name "texlive")
-   (version "20190410")
+   (version "20210325")
    (source #f)
    (build-system trivial-build-system)
-   (inputs `(("bash" ,bash) ; for wrap-program
+   (inputs `(("bash" ,bash-minimal)     ;for wrap-program
              ("texlive-bin" ,texlive-bin)
              ("texlive-texmf" ,texlive-texmf)))
    (native-search-paths
@@ -6308,7 +6915,7 @@ This package contains the complete TeX Live distribution.")
 (define-public perl-text-bibtex
   (package
     (name "perl-text-bibtex")
-    (version "0.85")
+    (version "0.88")
     (source
      (origin
        (method url-fetch)
@@ -6316,7 +6923,7 @@ This package contains the complete TeX Live distribution.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "036kxgbn1jf70pfm2lmjlzjwnhbkd888fp5lyvmkjpdd15gla18h"))))
+         "0b7lmjvfmypps1nw6nsdikgaakm0n0g4186glaqazg5xd1p5h55h"))))
     (build-system perl-build-system)
     (arguments
      `(#:phases
@@ -6353,20 +6960,16 @@ values (strings, macros, or numbers) pasted together.")
     ;; checking the Biber/BibLaTeX compatibility matrix in the BibLaTeX manual
     ;; at <https://ctan.org/pkg/biblatex>.
     (name "biber")
-    (version "2.12")
+    (version "2.16")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/plk/biber/")
                     (commit (string-append "v" version))))
               (file-name (git-file-name name version))
-              ;; TODO: Patch awaiting inclusion upstream (see:
-              ;; https://github.com/plk/biber/issues/239).
-              (patches (search-patches "biber-fix-encoding-write.patch"
-                                       "biber-sortinithash.patch"))
               (sha256
                (base32
-                "1g1hi6zvf2hmrjly1sidjaxy5440gfqm4p7p3n7kayshnjsmlskx"))))
+                "0586q8y1f2k23mvb02ccm3qsb35cwskafksixsjaih7a7xcf5gxx"))))
     (build-system perl-build-system)
     (arguments
      `(#:phases
@@ -6389,6 +6992,7 @@ values (strings, macros, or numbers) pasted together.")
        ("perl-datetime-format-builder" ,perl-datetime-format-builder)
        ("perl-datetime-calendar-julian" ,perl-datetime-calendar-julian)
        ("perl-file-slurper" ,perl-file-slurper)
+       ("perl-io-string" ,perl-io-string)
        ("perl-ipc-cmd" ,perl-ipc-cmd)
        ("perl-ipc-run3" ,perl-ipc-run3)
        ("perl-list-allutils" ,perl-list-allutils)
@@ -6396,10 +7000,8 @@ values (strings, macros, or numbers) pasted together.")
        ("perl-mozilla-ca" ,perl-mozilla-ca)
        ("perl-regexp-common" ,perl-regexp-common)
        ("perl-log-log4perl" ,perl-log-log4perl)
-       ;; We cannot use perl-unicode-collate here, because otherwise the
-       ;; hardcoded hashes in the tests would differ.  See
-       ;; https://mail-archive.com/debian-bugs-dist@lists.debian.org/msg1469249.html
-       ;;("perl-unicode-collate" ,perl-unicode-collate)
+       ("perl-parse-recdescent" ,perl-parse-recdescent)
+       ("perl-unicode-collate" ,perl-unicode-collate)
        ("perl-unicode-normalize" ,perl-unicode-normalize)
        ("perl-unicode-linebreak" ,perl-unicode-linebreak)
        ("perl-encode-eucjpascii" ,perl-encode-eucjpascii)
@@ -6500,7 +7102,7 @@ PDF documents.")
                        "texmaker.pro")))))))
     (inputs
      `(("poppler-qt5" ,poppler-qt5)
-       ("qtbase" ,qtbase)
+       ("qtbase" ,qtbase-5)
        ("qtscript" ,qtscript)
        ("qtwebkit" ,qtwebkit)
        ("zlib" ,zlib)))
@@ -6540,12 +7142,12 @@ develop documents with LaTeX, in a single application.")
              (delete-file "book.pdf")
              #t)))))
     (native-inputs
-     `(("texlive" ,(texlive-union (list texlive-amsfonts
-                                        texlive-fonts-adobe-palatino
-                                        texlive-fonts-adobe-zapfding
-                                        texlive-fonts-knuth-lib
-                                        texlive-fonts-mflogo-font
-                                        texlive-generic-pdftex)))
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
+                                        texlive-palatino
+                                        texlive-zapfding
+                                        texlive-knuth-lib
+                                        texlive-mflogo-font
+                                        texlive-pdftex)))
        ("automake" ,automake)))
     (home-page "https://www.gnu.org/software/teximpatient/")
     (synopsis "Book on TeX, plain TeX and Eplain")
@@ -6606,11 +7208,11 @@ and Karl Berry.")
        ("libx11" ,libx11)
        ("mythes" ,mythes)
        ("python" ,python)
-       ("qtbase" ,qtbase)
+       ("qtbase" ,qtbase-5)
        ("qtsvg" ,qtsvg)
        ("zlib" ,zlib)))
     (propagated-inputs
-     `(("texlive" ,(texlive-union (list texlive-fonts-ec)))))
+     `(("texlive" ,(texlive-updmap.cfg (list texlive-fonts-ec)))))
     (native-inputs
      `(("python" ,python)
        ("pkg-config" ,pkg-config)))
@@ -6637,7 +7239,7 @@ required: automatic sectioning and pagination, spell checking and so forth.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0s86v2b6b1vky1svmmn8pn0l2gz3v280mvjbr2d9l2sjyarlgz9w"))))
+                "0a1v70k6231323y1lazfda1y9568w8hn7c8jhc7rblkhdfv3slw7"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -6677,7 +7279,7 @@ specification.  It replaces the now obsolete @code{movie15} package.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1yhp51w8yr10c10pc9196q7hlw80brzqinnqbjw81d0sf2p0llc5"))))
+                "1mrz1mj59m27bfya52vi4lm84ifisaf30pmf8id1biqwcq4jyynh"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -6718,7 +7320,7 @@ It also ensures compatibility with the @code{media9} and @code{animate} packages
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0m4wx3yjb5al1qsv995z8fii8xxy96mcfihbnlx43lpgayiwz35s"))))
+                "04ww5abfm7dx81d21yr2gwy9jswaalnfm2384xp4cyx7srd9spfv"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/ms"
@@ -6841,7 +7443,7 @@ is preferred in many parts of the world, as distinct from that which is used in
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "1rzdniqq9zk39w8ch8ylx3ywh2mj87s4ivchrsk2b8nx06jyn797"))))
+         "161ka7sckiakcr1fgydxpc580sr16vp4sp3avjl2v9jn1pd2pwp0"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -6878,7 +7480,7 @@ striking out (line through words) and crossing out (/// over words).")
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "1dscrgwyr71vgx35mzb316xl669arzagfgq50fdv3nxga63959b3"))))
+         "1jk10rxz5f8vh46am11b40hxhhikk67h9jr3z877q5qc8kwppgza"))))
     (build-system trivial-build-system)
     (native-inputs
      `(("texlive-latex-pgf-generic"
@@ -6892,9 +7494,9 @@ striking out (line through words) and crossing out (/// over words).")
            (file-name (string-append "texlive-latex-pgf-generic" version "-checkout"))
            (sha256
             (base32
-             "0hk5x2j15n4pps279cmkbjl1dvhasq3mbhna5xdvp2qgh635ahks"))))))
+             "05zdq7y3am109m5534ahqqp9x5iar3ha68v1r4zkrdly2mijxz2j"))))))
     (propagated-inputs
-     `(("texlive-latex-xcolor" ,texlive-latex-xcolor)))
+     `(("texlive-xcolor" ,texlive-xcolor)))
     (arguments
      `(#:modules ((guix build utils))
        #:builder
@@ -6936,7 +7538,7 @@ produce either PostScript or PDF output.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1vz9zg7s5w52xr323zgglzprfrvba2zvyzf6b8vrdf4wdghlpv4z"))))
+                "1m6i8162r6ka19q517llrf0lax80rrsq564qirwk1chv5dqsmnfi"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -6981,6 +7583,165 @@ refers to the version of scrbook, scrreprt, scrartcl, scrlttr2 and
 typearea (which are the main parts of the bundle).")
     (license license:lppl1.3+)))
 
+(define-public texlive-generic-atbegshi
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-atbegshi"
+              '("/doc/latex/atbegshi/"
+                "/tex/generic/atbegshi/")
+              (base32
+               "184fr5kd3wl44ix63lwb3ll7dhiikkyw1czbnzrl4am4rx0zh4d8")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/atbegshi")
+    (synopsis "Execute commands at @code{\\shipout} time")
+    (description
+     "This package is a modern reimplementation of package @code{everyshi},
+providing various commands to be executed before a @code{\\shipout} command.
+It makes use of e-TeX’s facilities if they are available.  The package may
+be used either with LaTeX or with plain TeX.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-bigintcalc
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-bigintcalc"
+              '("/doc/latex/bigintcalc/README.md"
+                "/tex/generic/bigintcalc/")
+              (base32
+               "19grk4p1dh566hgpzhnjyjnrw57hpjijcpr7ci401n9jszcc1xkz")
+              #:trivial? #t))
+    (propagated-inputs
+     `(("texlive-latex-pdftexcmds" ,texlive-latex-pdftexcmds)))
+    (home-page "https://www.ctan.org/pkg/bigintcalc")
+    (synopsis "Integer calculations on very large numbers")
+    (description
+     "This package provides expandable arithmetic operations with big
+integers that can exceed TeX's number limits.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-bitset
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-bitset"
+              '("/doc/latex/bitset/README.md"
+                "/tex/generic/bitset/")
+              (base32
+               "0inj6qpzizvsbxdfsaijnl4iq976kyrnchnm3gc1kc2w389zrn1l")
+              #:trivial? #t))
+    (propagated-inputs
+     `(("texlive-generic-infwarerr" ,texlive-generic-infwarerr)
+       ("texlive-generic-intcalc" ,texlive-generic-intcalc)
+       ("texlive-generic-bigintcalc" ,texlive-generic-bigintcalc)))
+    (home-page "https://www.ctan.org/pkg/bitset")
+    (synopsis "Handle bit-vector datatype")
+    (description
+     "This package defines and implements the data type bit set, a vector
+of bits.  The size of the vector may grow dynamically.  Individual bits
+can be manipulated.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-etexcmds
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-etexcmds"
+              '("/doc/latex/etexcmds/README.md"
+                "/tex/generic/etexcmds/")
+              (base32
+               "11y6pnlq13bp0ybi7c82g8ds8085zv1zaslgqv3dzhgi3dklpc0c")
+              #:trivial? #t))
+    (propagated-inputs
+     `(("texlive-generic-infwarerr" ,texlive-generic-infwarerr)
+       ("texlive-generic-iftex" ,texlive-generic-iftex)))
+    (home-page "https://www.ctan.org/pkg/etexcmds")
+    (synopsis "Avoid name clashes with e-TeX commands")
+    (description
+     "New primitive commands are introduced in e-TeX; sometimes the names
+collide with existing macros.  This package solves the name clashes by
+adding a prefix to e-TeX’s commands.  For example, ε-TeX’s
+@code{\\unexpanded} is provided as @code{\\etex@@unexpanded}.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-gettitlestring
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-gettitlestring"
+              '("/doc/latex/gettitlestring/"
+                "/tex/generic/gettitlestring/")
+              (base32
+               "1p4hg9mac03rzvj9dw0ws3zdh55fy1ns954f912algw9f2aq4xgp")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/gettitlestring")
+    (synopsis "Clean up title references")
+    (description
+     "This package provides commands for cleaning up the title string
+(such as removing @code{\\label} commands) for packages that typeset such
+strings.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-infwarerr
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-infwarerr"
+              '("/tex/generic/infwarerr/")
+              (base32
+               "19nlrbfmqbkjrrx9x75s9nd6crg1lzimb2fr3hfblaivj6lx8p4r")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/infwarerr")
+    (synopsis "Information/warning/error macros")
+    (description
+     "This package provides a complete set of macros for information,
+warning and error messages.  Under LaTeX, the commands are wrappers for
+the corresponding LaTeX commands; under Plain TeX they are available as
+complete implementations.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-intcalc
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-intcalc"
+              '("/tex/generic/intcalc/")
+              (base32
+               "0llrnayqwdqxi91yh7panbbiljina3bynv2hxhi6sssaw3pyd92l")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/intcalc")
+    (synopsis "Expandable arithmetic operations with integers")
+    (description
+     "This package provides expandable arithmetic operations with integers,
+using the e-TeX extension @code{\\numexpr} if it is available.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-kvdefinekeys
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-kvdefinekeys"
+              '("/tex/generic/kvdefinekeys/")
+              (base32
+               "12nn74skhwiszbdhawqds31caz6d59a5pjmwar0r8lmk4f1jr3xh")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/kvdefinekeys")
+    (synopsis "Define keys for use in the @code{kvsetkeys} package")
+    (description
+     "This package provides the @code{\\kv@@define@@key} (analogous to
+keyval’s @code{\\define@@key}, to define keys for use by @code{kvsetkeys}.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-kvsetkeys
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-kvsetkeys"
+              '("/tex/generic/kvsetkeys/")
+              (base32
+               "149vpmv4vms269dzq4sghlngg380sasvxnb3sx9rfs7d9j0finvi")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/kvsetkeys")
+    (synopsis "Key value parser with default handler support")
+    (description
+     "This package provides @code{\\kvsetkeys}, a variant of @code{\\setkeys}
+from the @code{keyval} package.  Users can specify a handler that deals with
+unknown options.  Active commas and equal signs may be used, and only one
+level of curly braces are removed from the values.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-generic-listofitems
   (package
     (name "texlive-generic-listofitems")
@@ -6995,7 +7756,7 @@ typearea (which are the main parts of the bundle).")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1x4wnpca97rnbvvg6wjmbkxxvnfva274q9ahzx746b435q93z3i1"))))
+                "1wnbnfrhi6hgqa78jsw6hljzi03i5x99mlr5n2419hgws52hk67y"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -7015,6 +7776,58 @@ the parsing character has been selected by the user, and to access any of
 these items with a simple syntax.")
     (license license:lppl1.3c+)))
 
+(define-public texlive-generic-ltxcmds
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-ltxcmds"
+              '("/tex/generic/ltxcmds/")
+              (base32
+               "1lr77yai2qivlx26s5094czpfxmg96bhxps5wbm8xn7cpsw0zbd9")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/ltxcmds")
+    (synopsis "LaTeX kernel commands extracted for general use")
+    (description
+     "This package exports some utility macros from the LaTeX kernel into
+a separate namespace and also makes them available for other formats such
+as plain TeX.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-pdfescape
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-pdfescape"
+              '("/tex/generic/pdfescape/")
+              (base32
+               "1vbdjmm9bi9ngzz2z1b8jnf6nzf9xsaj5pvyswg13y4dr00mnz6n")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/pdfescape")
+    (synopsis "pdfTeX's escape features for plain TeX")
+    (description
+     "This package implements pdfTeX's escape features (@code{\\pdfescapehex},
+@code{\\pdfunescapehex}, @code{\\pdfescapename}, @code{\\pdfescapestring})
+using TeX or e-TeX.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-generic-uniquecounter
+  (package
+    (inherit (simple-texlive-package
+              "texlive-generic-uniquecounter"
+              '("/doc/latex/uniquecounter/"
+                "/tex/generic/uniquecounter/")
+              (base32
+               "1bjh8vwiqlkmjqndnh4xp116524x4m3hdcyq2s231jiqy8il8dcc")
+              #:trivial? #t))
+    (propagated-inputs
+     `(("texlive-generic-bigintcalc" ,texlive-generic-bigintcalc)
+       ("texlive-generic-infwarerr" ,texlive-generic-infwarerr)))
+    (home-page "https://www.ctan.org/pkg/uniquecounter")
+    (synopsis "Unlimited unique counter")
+    (description
+     "This package provides a kind of counter that provides unique number
+values.  Several counters can be created with different names.  The numeric
+values are not limited.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-latex-readarray
   (package
     (name "texlive-latex-readarray")
@@ -7163,11 +7976,9 @@ AMS-LaTeX, AMS-TeX, and plain TeX).  The distribution includes Michael Barr's
 @code{diag} package, which was previously distributed stand-alone.")
       (license license:gpl3+))))
 
-(define-public texlive-fonts-xypic
-  (deprecated-package "texlive-fonts-xypic" texlive-xypic))
+(define-deprecated-package texlive-fonts-xypic texlive-xypic)
 
-(define-public texlive-generic-xypic
-  (deprecated-package "texblive-generic-xypic" texlive-xypic))
+(define-deprecated-package texlive-generic-xypic texlive-xypic)
 
 (define-public texlive-bibtex
   (package
@@ -7184,7 +7995,7 @@ AMS-LaTeX, AMS-TeX, and plain TeX).  The distribution includes Michael Barr's
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "1wijqq605cbhn2bdaryby3xpkwmnk9ixcrjn5zwlfrxbgfblzfmz"))))
+         "0fr0s3jhrvplddb42if570dxllz54fa0pf4d2am27h8m385nghbf"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -7217,6 +8028,9 @@ package, such as @command{natbib} as well).")
               (base32
                "09l5ymgz48s3hyn776l01g3isk3dnhrj1vdavdw4qq4kfxxpqdn9")
               #:trivial? #t))
+    ;; This provides charter.map.
+    (propagated-inputs
+     `(("texlive-psnfss" ,texlive-psnfss)))
     (home-page "https://www.ctan.org/pkg/charter")
     (synopsis "Charter fonts for TeX")
     (description "This package provides a copy of the Charter Type-1 fonts
@@ -7226,41 +8040,105 @@ Support for use with LaTeX is available in @code{freenfss}, part of
     (license (license:non-copyleft
               "http://mirrors.ctan.org/fonts/charter/readme.charter"))))
 
-(define-public texlive-fonts-charter
-  (deprecated-package "texlive-fonts-charter" texlive-charter))
+(define-deprecated-package texlive-fonts-charter texlive-charter)
 
-(define-public texlive-context-base
+(define-public texlive-context
   (package
-    (name "texlive-context-base")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (svn-reference
-                    (url (string-append "svn://www.tug.org/texlive/tags/"
-                                        %texlive-tag "/Master/texmf-dist/"
-                                        "/tex/context/base"))
-                    (revision %texlive-revision)))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "0d7d74giz5knvj4rj6mbzd6c05mwg9jrxab86jxdqbc3jy7cl4kz"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((target (string-append (assoc-ref %outputs "out")
-                                      "/share/texmf-dist/tex/context/case")))
-           (mkdir-p target)
-           (copy-recursively (assoc-ref %build-inputs "source") target)
-           #t))))
+    (inherit (simple-texlive-package
+              "texlive-context"
+              (list "/doc/context/"
+                    "/doc/man/man1/context.1"
+                    "/doc/man/man1/luatools.1"
+                    "/doc/man/man1/mtx-babel.1"
+                    "/doc/man/man1/mtx-base.1"
+                    "/doc/man/man1/mtx-bibtex.1"
+                    "/doc/man/man1/mtx-cache.1"
+                    "/doc/man/man1/mtx-chars.1"
+                    "/doc/man/man1/mtx-check.1"
+                    "/doc/man/man1/mtx-colors.1"
+                    "/doc/man/man1/mtx-context.1"
+                    "/doc/man/man1/mtx-dvi.1"
+                    "/doc/man/man1/mtx-epub.1"
+                    "/doc/man/man1/mtx-evohome.1"
+                    "/doc/man/man1/mtx-fcd.1"
+                    "/doc/man/man1/mtx-flac.1"
+                    "/doc/man/man1/mtx-fonts.1"
+                    "/doc/man/man1/mtx-grep.1"
+                    "/doc/man/man1/mtx-interface.1"
+                    "/doc/man/man1/mtx-metapost.1"
+                    "/doc/man/man1/mtx-modules.1"
+                    "/doc/man/man1/mtx-package.1"
+                    "/doc/man/man1/mtx-pdf.1"
+                    "/doc/man/man1/mtx-plain.1"
+                    "/doc/man/man1/mtx-profile.1"
+                    "/doc/man/man1/mtx-rsync.1"
+                    "/doc/man/man1/mtx-scite.1"
+                    "/doc/man/man1/mtx-server.1"
+                    "/doc/man/man1/mtx-texworks.1"
+                    "/doc/man/man1/mtx-timing.1"
+                    "/doc/man/man1/mtx-tools.1"
+                    "/doc/man/man1/mtx-unicode.1"
+                    "/doc/man/man1/mtx-unzip.1"
+                    "/doc/man/man1/mtx-update.1"
+                    "/doc/man/man1/mtx-watch.1"
+                    "/doc/man/man1/mtx-youless.1"
+
+                    "/bibtex/bst/context/"
+                    "/context/"
+
+                    "/fonts/afm/hoekwater/context/contnav.afm"
+                    "/fonts/cid/fontforge/Adobe-CNS1-4.cidmap"
+                    "/fonts/cid/fontforge/Adobe-GB1-4.cidmap"
+                    "/fonts/cid/fontforge/Adobe-Identity-0.cidmap"
+                    "/fonts/cid/fontforge/Adobe-Japan1-5.cidmap"
+                    "/fonts/cid/fontforge/Adobe-Japan1-6.cidmap"
+                    "/fonts/cid/fontforge/Adobe-Japan2-0.cidmap"
+                    "/fonts/cid/fontforge/Adobe-Korea1-2.cidmap"
+                    "/fonts/enc/dvips/context/"
+                    "/fonts/map/dvips/context/"
+                    "/fonts/map/luatex/context/"
+                    "/fonts/map/pdftex/context/"
+                    "/fonts/misc/xetex/fontmapping/context/"
+                    "/fonts/tfm/hoekwater/context/"
+                    "/fonts/type1/hoekwater/context/"
+                    "/metapost/context/"
+                    "/scripts/context/"
+                    "/tex/context/base/"
+                    "/tex/context/bib/"
+                    "/tex/context/colors/"
+                    "/tex/context/fonts/"
+                    "/tex/context/interface/"
+                    "/tex/context/modules/"
+                    "/tex/context/patterns/"
+                    "/tex/context/sample/"
+                    "/tex/context/test/"
+                    "/tex/context/user/"
+                    "/tex/generic/context/"
+                    "/tex/latex/context/")
+              (base32
+               "1rsw760f52rj62i7ms89xgxdi0qw6hag5fs5hb667nclr4kdkam8")
+              #:trivial? #t))
+    ;; TODO: add these missing packages:
+    ;; xetex, luatex, lm-math, manfnt-font, and mptopdf
+    (propagated-inputs
+     `(("texlive-amsfonts" ,texlive-amsfonts)
+       ("texlive-lm" ,texlive-lm)
+       ("texlive-pdftex" ,texlive-pdftex)
+       ("texlive-metapost" ,texlive-metapost)
+       ("texlive-fonts-stmaryrd" ,texlive-fonts-stmaryrd)
+       ("texlive-mflogo-font" ,texlive-mflogo-font)))
     (home-page "https://www.ctan.org/pkg/context")
     (synopsis "Full featured, parameter driven macro package for TeX")
-    (description "A full featured, parameter driven macro package, which fully
-supports advanced interactive documents.  See the ConTeXt garden for a wealth
-of support information.")
-    (license license:gpl2+)))
+    (description "ConTeXt is a full featured, parameter driven macro package,
+which fully supports advanced interactive documents.  See the ConTeXt garden
+for a wealth of support information.")
+    ;; The GPL applies to all code; alternatively, the LaTeX license may be used.
+    ;; The CC-BY-SA license applies to all documentation.
+    (license (list license:lppl1.3c+
+                   license:gpl2+
+                   license:cc-by-sa4.0))))
+
+(define-deprecated-package texlive-context-base texlive-context)
 
 (define-public texlive-beamer
   (package
@@ -7269,12 +8147,12 @@ of support information.")
               (list "/doc/latex/beamer/"
                     "/tex/latex/beamer/")
               (base32
-               "1fqzbkmw2kfxihab8j4dadc3v68xap6v2ghpp2064fna47xlwy1c")
+               "091n27n4l3iac911bvmpp735ffryyzaq46mkclgn3q9jsvc4ngiv")
               #:trivial? #t))
     (propagated-inputs
-     `(("texlive-latex-hyperref" ,texlive-latex-hyperref)
-       ("texlive-latex-oberdiek" ,texlive-latex-oberdiek)
-       ("texlive-latex-etoolbox" ,texlive-latex-etoolbox)
+     `(("texlive-hyperref" ,texlive-hyperref)
+       ("texlive-oberdiek" ,texlive-oberdiek)
+       ("texlive-etoolbox" ,texlive-etoolbox)
        ("texlive-latex-pgf" ,texlive-latex-pgf)))
     (home-page "https://www.ctan.org/pkg/beamer")
     (synopsis "LaTeX class for producing presentations and slides")
@@ -7291,8 +8169,7 @@ effects, varying slide transitions and animations.")
     ;; dual-licensed under either FDLv1.3+ or LPPL1.3c+.
     (license (list license:lppl1.3c+ license:gpl2+ license:fdl1.3+))))
 
-(define-public texlive-latex-beamer
-  (deprecated-package "texlive-latex-beamer" texlive-beamer))
+(define-deprecated-package texlive-latex-beamer texlive-beamer)
 
 (define-public texlive-latex-xmpincl
   (package
@@ -7317,58 +8194,44 @@ the metadata is stored in an XML file, and this XML stream is then embedded in
 the file to which it applies.")
     (license license:gpl3+)))
 
-(define-public texlive-latex-pdfx
-  (package
-    (name "texlive-latex-pdfx")
-    (version (number->string %texlive-revision))
-    (source
-     (origin
-       (method svn-fetch)
-       (uri (texlive-ref "latex" "pdfx"))
-       (file-name (string-append name "-" version "-checkout"))
-       (sha256
-        (base32
-         "18294h0cr05fs424m3x6aq24z5hf5zmiflalkj4kvpmsyyqqsj74"))))
-    (build-system texlive-build-system)
-    (arguments
-     '(#:tex-directory "latex/pdfx"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-encoding
-           (lambda _
-             (substitute* "pdfx.dtx"
-               (("    .+umaczy") "umaczy"))
-             #t))
-         (add-before 'install 'install-tex-files
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((target (string-append (assoc-ref outputs "out")
-                                          "/share/texmf-dist/tex/latex/pdfx")))
-               (mkdir-p target)
-               (copy-recursively (assoc-ref inputs "texlive-tex-pdfx") target)
-               ;; Install the generated version in the "install" phase.
-               (delete-file (string-append target "/pdfx.sty"))
-               #t))))))
-    (propagated-inputs
-     `(("texlive-generic-pdftex" ,texlive-generic-pdftex)))
-    (native-inputs
-     `(("texlive-tex-pdfx"
-        ,(origin
-           (method svn-fetch)
-           (uri (svn-reference
-                 (url (string-append "svn://www.tug.org/texlive/tags/"
-                                     %texlive-tag "/Master/texmf-dist/"
-                                     "/tex/latex/pdfx"))
-                 (revision %texlive-revision)))
-           (file-name (string-append "texlive-tex-latex-pdfx-" version "-checkout"))
-           (sha256
-            (base32
-             "171ffvpkj2fab4ljcxv3l6l5c8ga8zavdhmhfq07id8zyyr619ip"))))))
-    (home-page "https://www.ctan.org/pkg/pdfx")
-    (synopsis "PDF/X and PDF/A support for pdfTeX, LuaTeX and XeTeX")
-    (description
-     "This package helps LaTeX users to create PDF/X, PDF/A and other
+(define-public texlive-pdfx
+  (let ((template (simple-texlive-package
+                   "texlive-pdfx"
+                   (list "/doc/latex/pdfx/"
+                         "/source/latex/pdfx/"
+                         "/tex/latex/pdfx/")
+                   (base32
+                    "1z4j4d92k2fjmf8jfap4zn7ij97d9rz2jcs9aslcac07ag4x5bdp"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/pdfx")
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'delete-generated-file
+               (lambda _
+                 ;; Generate this file from sources
+                 (delete-file "tex/latex/pdfx/pdfx.sty")
+                 #t))
+             (add-after 'delete-generated-file 'chdir
+               (lambda _ (chdir "source/latex/pdfx") #t))
+             (add-after 'chdir 'fix-encoding
+               (lambda _
+                 (substitute* "pdfx.dtx"
+                   (("    .+umaczy") "umaczy"))
+                 #t))))))
+      (propagated-inputs
+       `(("texlive-pdftex" ,texlive-pdftex)))
+      (home-page "https://www.ctan.org/pkg/pdfx")
+      (synopsis "PDF/X and PDF/A support for pdfTeX, LuaTeX and XeTeX")
+      (description
+       "This package helps LaTeX users to create PDF/X, PDF/A and other
 standards-compliant PDF documents with pdfTeX, LuaTeX and XeTeX.")
-    (license license:lppl1.2+)))
+      (license license:lppl1.2+))))
+
+(define-deprecated-package texlive-latex-pdfx texlive-pdfx)
 
 (define-public texlive-ydoc
   (let ((template (simple-texlive-package
@@ -7392,21 +8255,11 @@ standards-compliant PDF documents with pdfTeX, LuaTeX and XeTeX.")
              (add-after 'unpack 'chdir
                (lambda _ (chdir "source/latex/ydoc") #t))
              (add-after 'copy-files 'move-files
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (let* ((share (string-append (assoc-ref outputs "out")
-                                              "/share/texmf-dist"))
-                        (target (string-append share "/tex/generic/ydoc"))
-                        (doc (string-append (assoc-ref outputs "doc")
-                                            "/share/texmf-dist/doc") ))
-                   (mkdir-p target)
-                   (for-each
-                    (lambda (file)
-                      (rename-file (string-append share "/tex/latex/ydoc/" file)
-                                   (string-append target "/" file)))
-                    '("ydocincl.tex" "ydocstrip.tex"))
-                   (mkdir-p doc)
-                   (rename-file (string-append share "/doc") doc)
-                   #t)))))))
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let ((source (assoc-ref inputs "source"))
+                       (doc (string-append (assoc-ref outputs "doc")
+                                           "/share/texmf-dist/doc")))
+                   (copy-recursively (string-append source "/doc")  doc))))))))
       (home-page "http://www.ctan.org/pkg/ydoc")
       (synopsis "Macros for documentation of LaTeX classes and packages")
       (description "The package provides macros and environments to document
@@ -7426,7 +8279,7 @@ change.")
                          "/tex/generic/pstricks/"
                          "/tex/latex/pstricks/")
                    (base32
-                    "0sdxdd0qi4sccw9il7d4s7jivs24pq99cdzfnrf0gkqjb1y8s7cl")
+                    "15c9iqfq2y9c8c78cvqb6vzd5a5rm7qq5x7m05jq1hb8sgqrqb0j")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -7472,7 +8325,7 @@ of the old package @code{pst-char}.")
                    "texlive-marginnote"
                    (list "/source/latex/marginnote/marginnote.dtx")
                    (base32
-                    "1vj1k8xm11gjdfj60as42d8lsv3dbzrm5dlgqcfk89d9dzm3k39j"))))
+                    "152bwxhnssj40rr72r6cfirvqbnc0h7xnagfrbz58v2xck53qhg1"))))
     (package
       (inherit template)
       (home-page "http://www.ctan.org/pkg/marginnote")
@@ -7493,13 +8346,13 @@ may be used instead of @code{\\marginpar} at almost every place where
 frames made with the @code{framed} package.")
       (license license:lppl1.3c+))))
 
-(define-public texlive-iftex
+(define-public texlive-generic-iftex
   (let ((template (simple-texlive-package
-                   "texlive-iftex"
+                   "texlive-generic-iftex"
                    (list "/doc/generic/iftex/"
-                         "/tex/generic/iftex/iftex.sty")
+                         "/tex/generic/iftex/")
                    (base32
-                    "089zvw31gby150n1k0zdk2c0q97pgbqs46phxydaqil64b55nnl7")
+                    "147xa5kl4kjs05nj8v3kd7dpr5xkz3xp3gdvjih32ccd7527f5vp")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -7513,13 +8366,17 @@ package also provides the @code{\\RequirePDFTeX}, @code{\\RequireXeTeX}, and
 LuaTeX (respectively) is not the engine in use.")
       (license license:lppl1.3+))))
 
+(define-deprecated-package texlive-iftex texlive-generic-iftex)
+
+(define-deprecated-package texlive-generic-ifxetex texlive-generic-iftex)
+
 (define-public texlive-tools
   (let ((template (simple-texlive-package
                    "texlive-tools"
                    (list "/doc/latex/tools/"
                          "/source/latex/tools/")
                    (base32
-                    "1ivhij7171wvrgcjn4wah84wxwpd21d0chh3zxab4pj067c8d0mh"))))
+                    "1xas0b69r3d5x4zhcqysgybyqaikd9avv6r1bdckb947id3iaz58"))))
     (package
       (inherit template)
       (arguments
@@ -7554,7 +8411,7 @@ are part of the LaTeX required tools distribution, comprising the packages:
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0wancavix39j240pd8m9cgmwsijwx6jd6n54v8wg0x2rk5m44myp"))))
+                "0w4x82wmdvcmy8z3p55xvpz5q7jac1q1j591hi8mngfyqa8rda1c"))))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/xkeyval"
@@ -7607,7 +8464,7 @@ are part of the LaTeX required tools distribution, comprising the packages:
        ("texlive-xcolor" ,texlive-xcolor)
        ("texlive-latex-footmisc" ,texlive-latex-footmisc)
        ("texlive-latex-listings" ,texlive-latex-listings)
-       ("texlive-iftex" ,texlive-iftex)
+       ("texlive-generic-iftex" ,texlive-generic-iftex)
        ("texlive-pstricks" ,texlive-pstricks)
        ("texlive-pst-text" ,texlive-pst-text)
        ("texlive-tools" ,texlive-tools)
@@ -7662,7 +8519,7 @@ The behaviour in standalone mode may adjusted using a configuration file
              (list "/source/latex/siunitx/siunitx.dtx"
                    "/doc/latex/siunitx/README.md")
              (base32
-              "11kf6znkgw7y5qmw75qk6px6pqf57bwr53q0673zaiyq20lif96c")))
+              "05kl7yid2npp2gbfshnv2xd08w81fkh5h2n5wd9xcpbhlqjzx9sj")))
     (build-system texlive-build-system)
     (arguments
      '(#:tex-directory "latex/siunitx"
@@ -7702,7 +8559,7 @@ package to handle all of the possible unit-related needs of LaTeX users.")
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "1dqid48vgh25wmw8xzmx6x3pfgz1y9f0r8aza1yxq2mjny5yf68x"))))
+         "1mycxzl761p2zzmva8xsjbxbvrxx3vhi5p160mh9kiqwhrs5biz5"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/booktabs"))
     (home-page "http://www.ctan.org/pkg/booktabs")
@@ -7720,7 +8577,7 @@ to what constitutes a good table in this context.  The package offers
                    (list "/doc/latex/csquotes/"
                          "/tex/latex/csquotes/")
                    (base32
-                    "088gvi60d7sdl6fgg68fbz30fnpqc3yrpkx80sfw7vwgar3wm3av")
+                    "17y5mrmjmi7n0cgq4cnqr55f4bni6lx1pfdv5pzsmbrzha3mhbfg")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -7778,7 +8635,7 @@ XML file.
                    (list "/doc/latex/biblatex/"
                          "/tex/latex/biblatex/")
                    (base32
-                    "11kzvny50iklzkamr0rqd5x532q8rxny1xhmf96jl8mzj1d2zmay")
+                    "091cz2vrq22d1fr05wljd8vbllsz95q2hn2p8hhrwb2l2xrmxwn8")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -7817,7 +8674,7 @@ section.
                    (list "/doc/latex/todonotes/"
                          "/tex/latex/todonotes/")
                    (base32
-                    "0lvxsskz4bdfxhd59hf77kiq8k4nh2spb66vc6hifdgi21z8r8wm")
+                    "1jqw8jy73488bdr971w0dnlggsvicagpnpx8ddqkma920ba8rabp")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -7856,7 +8713,7 @@ included in the @code{units} bundle.")
                    (list "/doc/latex/microtype/"
                          "/tex/latex/microtype/")
                    (base32
-                    "0xmjpzbj4nqmnl5m7xx1bshdk2c8n57rmbvn0j479ypj4wdlq9iy")
+                    "07861ixrjzxm0l24z82ivhaj4v6xm4ijbaabp66jxsf8s8h7dq9n")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -7881,7 +8738,7 @@ the bundle.")
                    (list "/doc/latex/caption/"
                          "/tex/latex/caption/")
                    (base32
-                    "09gmh8yjj9f5zak8r18g87w9p5jn7flnvmlhxmvdq6992mbdc6hg")
+                    "1isnn375d14xsx398j3m8rbb0pdk12kijw4xcgl82xici170klwq")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -8058,7 +8915,7 @@ a repackaging, for use with TeX, of the Bitstream Vera family.")
                     "/fonts/vf/public/fourier/"
                     "/tex/latex/fourier/")
               (base32
-               "1vs2xdx6f6hd01zlslx3y93g3dsa7k3yhqpnhgkizgjmz0r9ipz1")
+               "04d575nd4yvl58g9dfab9mrjxiv4792bdkz4bjvlkx6x257vlfzn")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/fourier")
     (synopsis "Utopia fonts for LaTeX documents")
@@ -8104,7 +8961,7 @@ matching maths fonts are provided by the @code{fourier} and
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "19mhp9l7cjw0sbq55c9lz0l2pffkyhyir3i63jqynifjmglbgkl7"))))
+         "0j3w1y66pkf3bjl9dh5xy3lfg33rg08s4wx37a3jcndvcji20j3f"))))
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/fontaxes"))
     (home-page "http://www.ctan.org/pkg/fontaxes")
@@ -8116,6 +8973,30 @@ shape axis and it adds three new axes to deal with the different
 figure versions offered by many professional fonts.")
     (license license:lppl1.3+)))
 
+(define-public texlive-preprint
+  (package
+    (name "texlive-preprint")
+    (version "1.0e")
+    (source
+     (origin
+       (method svn-fetch)
+       (uri (texlive-ref "latex" "preprint"))
+       (file-name (string-append name "-" version "-checkout"))
+       (sha256
+        (base32
+         "173ik9xad3zih6gcdwdkzyljarh06ky6c5d2x1yjs22qqi75py5a"))))
+    (build-system texlive-build-system)
+    (arguments '(#:tex-directory "latex/preprint"))
+    (home-page "http://www.ctan.org/pkg/preprint")
+    (synopsis "Bundle of modules for preprints")
+    (description "The bundle comprises: @code{authblk}, which permits
+footnote style author/affiliation input in the @command{\\author} command,
+@code{balance}, to balance the end of @command{\\twocolumn} pages,
+@code{figcaps}, to send figure captions, etc., to end document,
+@code{fullpage}, to set narrow page margins and set a fixed page style, and
+@code{sublabel}, which permits counters to be subnumbered.")
+    (license license:lppl1.3+)))
+
 (define-public texlive-mweights
   (package
     (inherit (simple-texlive-package
@@ -8123,7 +9004,7 @@ figure versions offered by many professional fonts.")
               (list "/doc/latex/mweights/"
                     "/tex/latex/mweights/")
               (base32
-               "1k2xclk54q3xgn48hji23q52nivkzgwf0s30bmm6k83f7v57qv8h")
+               "12493g3yz06mhiybnphqbp49fjzy36clzw63b74mkfhsg1pq7h1b")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/mweights")
     (synopsis "Support for multiple-weight font packages")
@@ -8149,7 +9030,7 @@ or if it differs from the weight desired for another font family.  The
                     "/fonts/vf/impallari/cabin/"
                     "/tex/latex/cabin/")
               (base32
-               "0dfq9gqch80iyvp58spmpmqfc9h61sjvnddm81ba0af1p8ag8sfg")
+               "1gqqqbj7i18fs1ss5n3axd821hzq5kbv1dl7dqxp4gba619f1rli")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/cabin")
     (synopsis "Humanist Sans Serif font with LaTeX support")
@@ -8180,7 +9061,7 @@ use with [pdf]LaTeX.")
                     "/fonts/vf/public/newtx/"
                     "/tex/latex/newtx/")
               (base32
-               "0rqjj33m6xkhrjzjhf24kxdg61az5sqsbcl0m7xqkf4akqybn22d")
+               "0h0wm3cd0wxag5x7vy3vgr42jd8m6ffkl90pnkvqdxzbnfdjv3l6")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/newtx")
     (synopsis "Repackaging of the TX fonts with improved metrics")
@@ -8208,7 +9089,7 @@ mathematics package that matches Libertine text quite well.")
                     "/fonts/vf/public/xcharter/"
                     "/tex/latex/xcharter/")
               (base32
-               "0krm4h53lw7h9jbmv5nc89fm4x7i8l574aig1l4mw8w3ziknwmi7")
+               "0d8rvcmvxrlxqqxpirxqbhmiijpsz5y4vvldh1jnc018aannjlhm")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/xcharter")
     (synopsis "Extension of the Bitstream Charter fonts")
@@ -8479,13 +9360,38 @@ Arguments may contain verbatim material or other special use of characters.
 The macros were designed for use within other macros.")
       (license license:lppl1.3))))
 
+(define-public texlive-grfext
+  (let ((template (simple-texlive-package
+                   "texlive-grfext"
+                   (list "/doc/latex/grfext/README.md"
+                         "/source/latex/grfext/grfext.dtx")
+                   (base32
+                    "1cdvjp9gcnixxlbl8ibwz1yr799gwax5hm686hwmwsigdgafhzgq"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ '())
+          "latex/grfext")
+         ((#:build-targets _ '())
+          ''("grfext.dtx"))
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/grfext")))))))
+      (home-page "https://github.com/ho-tex/grfext")
+      (synopsis "Manipulate the graphics package's list of extensions")
+      (description "This package provides macros for adding to, and reordering
+the list of graphics file extensions recognised by package graphics.")
+      (license license:lppl1.3c+))))
+
 (define-public texlive-adjustbox
   (let ((template (simple-texlive-package
                    "texlive-adjustbox"
                    (list "/doc/latex/adjustbox/"
                          "/source/latex/adjustbox/")
                    (base32
-                    "14vd0yd50bky2pbbjkn59q1aglnqpdhh8vwjdyan0jkzljsr2ch8"))))
+                    "074nxbnl184b6iwhis5n85pilq3b2pld3bbrq0wc30hw462m898k"))))
     (package
       (inherit template)
       (arguments
@@ -8526,7 +9432,7 @@ provided box macros are @code{\\lapbox}, @code{\\marginbox},
                    (list "/doc/latex/tcolorbox/"
                          "/tex/latex/tcolorbox/")
                    (base32
-                    "172lcnk6964alsga5w6kcvjhpjjcw1g9df73k8pyhl5lf4fmxa29")
+                    "1qnsbblkadzdn1fx2k21xnlwcb35pg9xya24chkm66jmidi22qp0")
                    #:trivial? #true)))
     (package
       (inherit template)
@@ -8546,6 +9452,35 @@ theorems.  The package supports saving and reuse of source code and text
 parts.")
       (license license:lppl1.3c+))))
 
+(define-public texlive-latex-ebproof
+  (package
+    (name "texlive-latex-ebproof")
+    (version "2.1.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://framagit.org/manu/ebproof")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1zkrfaf343js0yc1x7m3d8hzbh5izn0lb01jrmdpjm51kdbh30xq"))))
+    (build-system texlive-build-system)
+    (arguments '(#:tex-directory "latex/ebproof"))
+    (propagated-inputs
+     `(("texlive-latex-l3kernel" ,texlive-latex-l3kernel)))
+    (home-page "http://www.ctan.org/pkg/ebproof")
+    (synopsis
+     "Formal proofs in the style of sequent calculus")
+    (description
+     "This package provides commands to typeset proof trees in the style of
+sequent calculus and related systems.  The commands allow for writing
+inferences with any number of premises and alignment of successive formulas on
+an arbitrary point.  Various options allow complete control over spacing,
+styles of inference rules, placement of labels, etc.")
+    (license license:lppl1.3+)))
+
 (define-public texlive-eurosym
   (let ((template (simple-texlive-package
                    "texlive-eurosym"
@@ -8599,3 +9534,33 @@ constructs TeX accepts as arguments to its @code{\\number} primitive
 are valid as arguments for the macros.  The package may be used under
 LaTeX and plain TeX.")
     (license (license:fsf-free "file:/binhex.dtx"))))
+
+(define-public bibtool
+  (package
+    (name "bibtool")
+    (version "2.68")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/ge-ne/bibtool")
+         (commit (string-append
+                  "BibTool_"
+                  (string-map (lambda (c) (if (char=? c #\.) #\_ c))
+                              version)))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0grnmqj8w5018nd7r6drnq2yvfhf22gj9i3rj8ilhzm7zmz3zn0g"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:test-target "test"))
+    (native-inputs
+     `(("perl" ,perl)))
+    (home-page "http://www.gerd-neugebauer.de/software/TeX/BibTool/en")
+    (synopsis "Tool for manipulating BibTeX databases")
+    (description
+     "BibTool manipulates BibTeX files.  The possibilities of BibTool include
+sorting and merging of BibTeX databases, generation of uniform reference keys,
+and selecting references used in a publication.")
+    (license license:gpl2+)))