summary refs log tree commit diff
path: root/gnu/packages/tex.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/tex.scm')
-rw-r--r--gnu/packages/tex.scm821
1 files changed, 782 insertions, 39 deletions
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index 7fab21679e..529ecee891 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -14,13 +14,14 @@
 ;;; Copyright © 2018, 2020 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020, 2021 Paul Garlick <pgarlick@tourbillion-technology.com>
-;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021, 2022 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>
 ;;; Copyright © 2022 Simon South <simon@simonsouth.net>
+;;; Copyright © 2022 Jack Hill <jackhill@jackhill.us>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -51,6 +52,7 @@
   #:use-module (guix build-system texlive)
   #:use-module (guix utils)
   #:use-module (guix deprecation)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix svn-download)
   #:use-module (gnu packages)
@@ -59,6 +61,8 @@
   #:use-module (gnu packages bash)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages lisp)
+  #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gd)
   #:use-module (gnu packages ghostscript)
@@ -562,6 +566,52 @@ This package contains the binaries.")
     (license (license:fsf-free "https://www.tug.org/texlive/copying.html"))
     (home-page "https://www.tug.org/texlive/")))
 
+(define-public texlive-bidi
+  (package
+    (name "texlive-bidi")
+    ;; Take the version from texlive-2022.0 as the one from texlive 2021.0 is
+    ;; buggy.
+    (version "36.4")
+    (source (origin
+              (method svn-multi-fetch)
+              (uri (svn-multi-reference
+                    (url (string-append "svn://www.tug.org/texlive/tags/"
+                                        "texlive-2022.0/Master/texmf-dist"))
+                    (locations (list "doc/xelatex/bidi/"
+                                     "source/xelatex/bidi/"))
+                    (revision 62885)))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "09nfvsjfnms3pclyd2rcivyb5qvzw48b934i3bcl83hv69ix2ks7"))))
+    (outputs '("out" "doc"))
+    (build-system texlive-build-system)
+    (arguments
+     (list
+      #:tex-directory "xelatex/bidi"
+      #:phases #~(modify-phases %standard-phases
+                   (add-after 'unpack 'chdir
+                     (lambda _
+                       (chdir "source/xelatex/bidi")))
+                   (add-after 'install 'install-doc
+                     (lambda* (#:key outputs #:allow-other-keys)
+                       (let ((doc (string-append (assoc-ref outputs "doc")
+                                                 "/share/texmf-dist/doc")))
+                         (mkdir-p doc)
+                         (copy-recursively (string-append #$source "/doc")
+                                           doc)))))))
+    (propagated-inputs (list texlive-generic-iftex
+                             texlive-generic-ltxcmds
+                             texlive-hyperref
+                             texlive-latex-xkeyval
+                             texlive-zref))
+    (home-page "https://ctan.org/pkg/bidi")
+    (synopsis "Bidirectional typesetting in plain TeX and LaTeX using XeTeX")
+    (description "The @code{bidi} package provides a convenient interface for
+typesetting bidirectional texts with plain TeX and LaTeX.  The package
+includes adaptations for use with many other commonly-used packages.")
+    (license license:lppl1.3+)))
+
 (define-public texlive-libkpathsea
   (package/inherit texlive-bin
     (name "texlive-libkpathsea")
@@ -616,6 +666,26 @@ executables.  It is maintained as a part of TeX Live.")))
 documentation from TeX files.  It is part of the LaTeX base.")
     (license license:lppl1.3+)))
 
+(define-public texlive-underscore
+  (package
+    (inherit (simple-texlive-package
+              "texlive-underscore"
+              (list "/doc/latex/underscore/"
+                    "/tex/latex/underscore/")
+              (base32
+               "0slxsxc9azmv3gsm55jkhkv8a06wafankp55hhsdd6k4prp8szrb")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/underscore")
+    (synopsis "Control the behaviour of @samp{_} in text")
+    (description "This package causes @code{\\_} in text mode (i.e.,
+@code{\\textunderscore}) to print an underscore so that hyphenation of words
+either side of it is not affected; a package option controls whether an actual
+hyphenation point appears after the underscore, or merely a break point.  The
+package also arranges that, while in text, @samp{_} itself behaves as
+@code{\\textunderscore} (the behaviour of @samp{_} in maths mode is not
+affected).")
+    (license license:lppl1.2+)))
+
 (define-public texlive-unicode-data
   (package
     (inherit (simple-texlive-package
@@ -869,6 +939,44 @@ from (almost) arbitrarily complex font names, thus helping portability of TeX
 documents.")
     (license license:public-domain)))
 
+(define-public texlive-cbfonts          ;71 MiB of greek fonts
+  (package
+    (inherit (simple-texlive-package
+              "texlive-cbfonts"
+              (list "/doc/fonts/cbfonts/"
+                    "/fonts/type1/public/cbfonts/")
+              (base32
+               "01j22cbwq9jkni5vvrpz2mg1799cbx3aq801sni74i8wb1zcf6y1")
+              #:trivial? #t))
+    (propagated-inputs (list texlive-cbfonts-fd))
+    (home-page "https://www.ctan.org/pkg/cbgreek-complete")
+    (synopsis "Complete set of Greek fonts")
+    (description "This bundle presents the whole of Beccari's original Greek
+font set, which use the @i{Lispiakos} font shape derived from the shape of the
+fonts used in printers' shops in Lispia.  The fonts are available both as
+Metafont source and in Adobe Type 1 format, and at the same wide set of design
+sizes as are such font sets as the EC fonts.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-cbfonts-fd
+  (package
+    (inherit (simple-texlive-package
+              "texlive-cbfonts-fd"
+              (list "/doc/fonts/cbfonts/"
+                    "/tex/latex/cbfonts-fd/")
+              (base32
+               "0g91p2qcgqn916vgf777h45dabv2r6l6f9xkcq0b3gpir3qsj3d4")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/cbfonts-fd")
+    (synopsis "LaTeX font description files for the CB Greek fonts")
+    (description "The package provides font description files for all the many
+shapes available from the cbfonts collection.  The files provide the means
+whereby the @acronym{NFSS, New Font Selection Scheme} knows which fonts a
+LaTeX user is requesting.
+
+Tip: installing @code{texlive-cbfonts} will automatically propagate this one.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-cm
   (let ((template (simple-texlive-package
                    "texlive-cm"
@@ -944,6 +1052,31 @@ display, and mathematical fonts in a range of styles, based on Monotype Modern
 
 (define-deprecated-package texlive-fonts-cm texlive-cm)
 
+(define-public texlive-cm-lgc
+  (package
+    (inherit (simple-texlive-package
+              "texlive-cm-lgc"
+              (list "/doc/fonts/cm-lgc/"
+                    "/fonts/afm/public/cm-lgc/"
+                    "/fonts/type1/public/cm-lgc/"
+                    "/fonts/vf/public/cm-lgc/"
+                    "/tex/latex/cm-lgc/")
+              (base32
+               "0rm7wgyb07y8h6vbvc2xzsqnxy322d4j9ly2p67z84b81c8i3zpc")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/cm-lgc")
+    (synopsis "Type 1 CM-based fonts for Latin, Greek and Cyrillic")
+    (description "The fonts are converted from Metafont sources of the
+Computer Modern font families, using @command{textrace}.  Supported encodings
+are: T1 (Latin), T2A (Cyrillic), LGR (Greek) and TS1.  The package also
+includes Unicode virtual fonts for use with Omega.  The font set is not a
+replacement for any of the other Computer Modern-based font sets (for example,
+cm-super for Latin and Cyrillic, or cbgreek for Greek), since it is available
+at a single size only; it offers a compact set for @i{general} working.  The
+fonts themselves are encoded to external standards, and virtual fonts are
+provided for use with TeX.")
+    (license license:gpl2+)))
+
 (define-public texlive-cm-super
   (let ((template (simple-texlive-package
                    "texlive-cm-super"
@@ -1072,6 +1205,22 @@ Computers & Typesetting series.")
 
 (define-deprecated-package texlive-fonts-lm texlive-lm)
 
+(define-public texlive-lm-math
+  (package
+    (inherit (simple-texlive-package
+              "texlive-lm-math"
+              (list "/doc/fonts/lm-math/"
+                    "/fonts/opentype/public/lm-math/")
+              (base32
+               "0gqdk8x3r1iz4n8j6r3pcqbwalxvkihayvmjfq4iv6hwb0pvys8z")
+              #:trivial? #t))
+    (home-page "http://www.gust.org.pl/projects/e-foundry/latin-modern")
+    (synopsis "OpenType maths fonts for Latin Modern")
+    (description "Latin Modern Math is a maths companion for the Latin Modern
+family of fonts, in OpenType format.  For use with LuaLaTeX or XeLaTeX,
+support is available from the @code{unicode-math} package.")
+    (license license:gfl1.0)))
+
 (define-public texlive-knuth-lib
   (let ((template (simple-texlive-package
                    "texlive-knuth-lib"
@@ -2686,9 +2835,9 @@ UCY (Omega Unicode Cyrillic), LCY, LWN (OT2), and koi8-r.")
     (synopsis "Enhanced input encoding handling")
     (description
      "This package deals with input encodings.  It provides a wider range of input
-encodings using standard mappings, than does inputenc; it also covers nearly all
-slots.  In this way, it serves as more uptodate replacement for package
-inputenc.")
+encodings using standard mappings, than does inputenc.  It also covers nearly all
+slots.  In this way, it serves as more up to date replacement for the inputenc
+package.")
     (license license:lppl1.3+)))
 
 (define-public texlive-kpathsea
@@ -3366,22 +3515,18 @@ used by @code{hyperref} and @code{bookmark}.")
          ((#:phases phases)
           #~(modify-phases #$phases
               (add-after 'unpack 'chdir
-                (lambda _ (chdir "source/latex/xcolor")))
-              (replace 'copy-files
-                (lambda* (#:key inputs outputs #:allow-other-keys)
-                  (let ((origin (assoc-ref inputs "source"))
-                        (source (string-append #$output
-                                               "/share/texmf-dist/source"))
-                        (doc (string-append #$output:doc
-                                            "/share/texmf-dist/doc")))
-                    (copy-recursively (string-append origin "/source") source)
-                    (copy-recursively (string-append origin "/doc") doc)
-                    (let ((share (string-append #$output
-                                                "/share/texmf-dist")))
-                      (mkdir-p (string-append share "/dvips/xcolor"))
-                      (rename-file
-                       (string-append share "/tex/latex/xcolor/xcolor.pro")
-                       (string-append share "/dvips/xcolor/xcolor.pro"))))))))))
+                (lambda _ (chdir "source/latex/xcolor") #t))
+              (add-after 'install 'move-files
+                (lambda* (#:key outputs #:allow-other-keys)
+                  (let ((share (string-append (assoc-ref outputs "out")
+                                              "/share/texmf-dist")))
+                    (mkdir-p (string-append share "/dvips/xcolor"))
+                    (rename-file (string-append share "/tex/latex/xcolor/xcolor.pro")
+                                 (string-append share "/dvips/xcolor/xcolor.pro"))
+                    #t)))))))
+      ;; TODO: Propagate texlive-hyperref and many others in the next rebuild
+      ;; cycle.  Grep for '\usepackage' to see what packages it requires.
+      ;; (propagated-inputs (list texlive-hyperref ...))
       (home-page "https://www.ctan.org/pkg/xcolor")
       (synopsis "Driver-independent color extensions for LaTeX and pdfLaTeX")
       (description
@@ -3915,7 +4060,7 @@ here are defined for the dvips engine only.")
              (add-after 'unpack 'chdir
                (lambda _ (chdir "source/latex/fontspec/") #t))))))
       (propagated-inputs
-       (list texlive-latex-l3packages))
+       (list texlive-cm texlive-latex-l3packages texlive-lm))
       (home-page "https://www.ctan.org/pkg/fontspec")
       (synopsis "Advanced font selection in XeLaTeX and LuaLaTeX")
       (description
@@ -4293,6 +4438,65 @@ polyglossia package rather than Babel.")
 
 (define-deprecated-package texlive-latex-babel texlive-babel)
 
+(define-public texlive-cs
+  (package
+    (inherit (simple-texlive-package
+              "texlive-cs"
+              (list
+               "fonts/enc/dvips/cs/"
+               "fonts/map/dvips/cs/"
+               "fonts/source/public/cs/"
+               ;; TODO: Remove these pre-built files after the manual
+               ;; build below is fixed.
+               ;; The font fails to build from the Metafont sources, with
+               ;; errors such as:
+               ;; This is METAFONT, Version 2.71828182 (TeX Live 2021/GNU Guix) [...]
+               ;; (./csaccent.mf
+               ;; >> cap_curve#-dot_size#
+               ;; ! Unknown relation will be considered false.
+               ;; <to be read again>
+               "fonts/tfm/cs/cs-a35/"
+               "fonts/tfm/cs/cs-charter/"
+               "fonts/tfm/public/cs/"
+               "fonts/type1/public/cs/"
+               "fonts/vf/cs/cs-a35/")
+              (base32 "1ww5lrqja051fh0ygmfdyy5a6bhwq9k5zv857vwiqf5syvw5djps")
+              #:trivial? #t))
+    (home-page "http://petr.olsak.net/cstex/")
+    (synopsis "Czech/Slovak-tuned Computer Modern fonts")
+    (description "This package provides Czech/Slovak-tuned Computer Modern
+fonts in the Metafont format; Type 1 format versions (csfonts-t1) are also
+available.")
+    (license license:gpl2+)))           ;see fonts/source/public/cs/cscode.mf
+
+;;; Note: if this package is modified, its name must be changed to comply with
+;;; its license.
+(define-public texlive-csplain
+  (package
+    (inherit (simple-texlive-package
+              "texlive-csplain"
+              (list "tex/csplain/base/")
+              (base32 "0cgrwc8lgf2x2hq6bb4kqxw597card985zdd9ipn7k98mmwrxhz3")
+              #:trivial? #t))
+    (home-page "http://petr.olsak.net/csplain-e.html")
+    (synopsis "Plain TeX multilanguage support")
+    (description "CSplain is a small extension of basic Plain TeX macros from
+which the formats @code{csplain} and @code{pdfcsplain} can be generated.  It
+supports: hyphenation of words for 50+ languages, simple and powerful font
+loading system (various sizes of fonts), TeX, pdfTeX, XeTeX and LuaTeX
+engines, math fonts simply loaded with full amstex-like features, three
+internal encodings (IL2 for Czech/Slovak languages, T1 for many languages with
+latin alphabet and Unicode in new TeX engines), natural UTF-8 input in pdfTeX
+using encTeX without any active characters, Czech and Slovak special
+typesetting features.  An important part of the package is OPmac, which
+implements most of LaTeX's features (sectioning, font selection, color, hyper
+reference and URLs, bibliography, index, table of contents, tables, etc.) by
+Plain TeX macros.  The OPmac macros can generate a bibliography without any
+external program.")
+    ;; This custom permissive license includes as a redistribution condition
+    ;; that says the package must be renamed from 'csplain' if it is modified.
+    (license (license:non-copyleft "file:///tex/csplain/base/csplain.ini"))))
+
 (define-public texlive-generic-babel-english
   (package
     (name "texlive-generic-babel-english")
@@ -5667,7 +5871,8 @@ BibLaTeX, and is considered experimental.")
     (build-system texlive-build-system)
     (arguments '(#:tex-directory "latex/geometry"))
     (propagated-inputs
-     (list texlive-oberdiek)) ;for ifpdf
+     (list texlive-oberdiek             ;for ifpdf
+           texlive-latex-graphics))     ;for keyval
     (home-page "https://www.ctan.org/pkg/geometry")
     (synopsis "Flexible and complete interface to document dimensions")
     (description
@@ -5704,25 +5909,306 @@ which adds some minor changes to LaTeX maths; a rewrite of LaTeX's tabular and
 array environments; verbatim handling; and syntax diagrams.")
     (license license:gpl3+)))
 
-(define-public texlive-latex-polyglossia
+(define-public texlive-makecmds
   (package
-    (name "texlive-latex-polyglossia")
-    (version (number->string %texlive-revision))
-    (source (origin
-              (method svn-fetch)
-              (uri (texlive-ref "latex" "polyglossia"))
-              (file-name (string-append name "-" version "-checkout"))
-              (sha256
-               (base32
-                "1ci6hr8hx4g2x359n6wqvw6w8fv42cjjpzxxxd3pn6av5nkaiav3"))))
-    (build-system texlive-build-system)
-    (arguments '(#:tex-directory "latex/polyglossia"))
+    (inherit (simple-texlive-package
+              "texlive-makecmds"
+              (list "doc/latex/makecmds/README"
+                    "source/latex/makecmds/makecmds.dtx"
+                    "source/latex/makecmds/makecmds.ins")
+              (base32 "0znx80x6ic7a25v9dw8yjibq7lx65wangcyii18kk5x5z4jljba9")))
+    (outputs '("out" "doc"))
+    (arguments
+     (list
+      #:tex-directory "latex/makecmds"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'build 'chdir
+            (lambda _
+              (setenv "ROOT_DIR" (getcwd))
+              (chdir "source/latex/makecmds")))
+          (add-after 'build 'build-doc
+            (lambda _
+              (copy-file "makecmds.dtx" "build/makecmds.dtx")
+              (chdir "build")
+              (invoke "pdflatex" "makecmds.dtx"))) ;generate makecmds.pdf
+          (replace 'install
+            (lambda* (#:key outputs tex-directory #:allow-other-keys)
+              (let ((doc (string-append (assoc-ref outputs "doc")
+                                        "/share/doc/" tex-directory))
+                    (out (string-append #$output "/share/texmf-dist/tex/"
+                                        tex-directory)))
+                (install-file "makecmds.pdf" doc)
+                (install-file (car (find-files (getenv "ROOT_DIR") "README"))
+                              doc)
+                (install-file "makecmds.sty" out)))))))
+    (native-inputs (list (texlive-updmap.cfg
+                          (list texlive-amsfonts
+                                texlive-cm))))
+    (home-page "https://www.ctan.org/pkg/makecmds")
+    (synopsis "TeX macro to define or redefine a command")
+    (description "The package provides a @code{\\makecommand} command, which
+is like @code{\\newcommand} or @code{\\renewcommand} except it
+always (re)defines a command.  There is also @code{\\makeenvironment} and
+@code{\\provideenvironment} for environments.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-metalogo
+  (package
+    (inherit (simple-texlive-package
+              "texlive-metalogo"
+              (list "doc/latex/metalogo/README"
+                    ;; These PDFs are apparently used as graphic files, not
+                    ;; built.
+                    "doc/latex/metalogo/TeXoutline.pdf"
+                    "doc/latex/metalogo/eLaToutline.pdf"
+                    "source/latex/metalogo/metalogo.dtx"
+                    "source/latex/metalogo/metalogo.ins")
+              (base32 "0v1jwp8xhzwn0a4apiyya17s4r1kpn6q9nmv38jj1wwdvgia0jpi")))
+    (outputs '("out" "doc"))
+    (arguments
+     (list
+      #:tex-directory "latex/metalogo"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'build 'chdir
+            (lambda _
+              (setenv "ROOT_DIR" (getcwd))
+              (chdir "source/latex/metalogo")))
+          (add-after 'chdir 'patch-metalogo.dtx
+            (lambda _
+              (substitute* "metalogo.dtx"
+                ;; Prevent embedding a build time date, for reproducibility.
+                (("^% \\\\date.*") "")
+                ;; These fonts are not free.
+                (("^\\\\setmainfont.*") "")
+                (("^\\\\DeclareSymbolFont\\{SabonMaths}.*") "")
+                (("^\\\\AtBeginDocument\\{.*") "")
+                ((".*\\\\expandafter.*\\\\symSabonMaths.*") "")
+                (("^\\\\setsansfont.*MgOpen Cosmetica.*") "")
+                (("^\\\\setmonofont.*Consolas.*") "")
+                ;; The 'stix' texlive font package has been obsoleted by
+                ;; stix2.
+                (("^\\\\newfontfamily\\\\stixgeneral\\{STIXGeneral}")
+                 "\\newfontfamily\\stixgeneral{STIX Two Text}"))))
+          (add-after 'build 'build-doc
+            (lambda* (#:key outputs tex-directory #:allow-other-keys)
+              (define doc-sources (string-append (getenv "ROOT_DIR")
+                                                 "/doc/latex/metalogo"))
+              (copy-file "metalogo.dtx" "build/metalogo.dtx")
+              (mkdir "build/graphics")
+              (copy-file (string-append doc-sources "/TeXoutline.pdf")
+                         "build/graphics/TeXoutline.pdf")
+              (copy-file (string-append doc-sources "/eLaToutline.pdf")
+                         "build/graphics/eLaToutline.pdf")
+              (chdir "build")
+              (invoke "xelatex" "metalogo.dtx"))) ;generate metalogo.pdf
+          (replace 'install
+            (lambda* (#:key outputs tex-directory #:allow-other-keys)
+              (let ((doc (string-append (assoc-ref outputs "doc")
+                                        "/share/doc/" tex-directory))
+                    (out (string-append #$output "/share/texmf-dist/tex/"
+                                        tex-directory)))
+                (install-file "metalogo.pdf" doc)
+                (install-file (car (find-files (getenv "ROOT_DIR") "README"))
+                              doc)
+                (install-file "metalogo.sty" out)))))))
+    (native-inputs (list fontconfig     ;for XDG_DATA_DIRS, to locate OTF fonts
+                         texlive-booktabs
+                         texlive-cm
+                         texlive-fontspec
+                         texlive-generic-iftex
+                         texlive-latex-base
+                         texlive-latex-eukdate
+                         texlive-latex-graphics
+                         texlive-latex-multirow
+                         texlive-lm     ;for lmroman10-regular
+                         texlive-stix2-otf))
+    (propagated-inputs (list texlive-fontspec texlive-generic-iftex
+                             texlive-latex-graphics))
+    (home-page "https://ctan.org/pkg/metalogo")
+    (synopsis "Extended TeX logo macros")
+    (description "This package exposes spacing parameters for various TeX
+logos to the end user, to optimise the logos for different fonts.  It is
+written especially for XeLaTeX users.")
+    (license license:lppl1.3c+)))
+
+(define-public texlive-paralist
+  (package
+    (inherit (simple-texlive-package
+              "texlive-paralist"
+              (list "doc/latex/paralist/README"
+                    "source/latex/paralist/paralist.dtx"
+                    "source/latex/paralist/paralist.ins")
+              (base32 "1lz8yds2i64wkb89a9amydwkzsdbc09s1kbgn7vgh2qsxqrrgwam")))
+    (outputs '("out" "doc"))
+    (arguments
+     (list
+      #:tex-directory "latex/paralist"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'build 'chdir
+            (lambda _
+              (setenv "ROOT_DIR" (getcwd))
+              (chdir "source/latex/paralist")))
+          (add-after 'build 'build-doc
+            (lambda* (#:key outputs tex-directory #:allow-other-keys)
+              (copy-file "paralist.dtx" "build/paralist.dtx")
+              (chdir "build")
+              (invoke "pdflatex" "paralist.dtx")))
+          (replace 'install
+            (lambda* (#:key outputs tex-directory #:allow-other-keys)
+              (let ((doc (string-append (assoc-ref outputs "doc")
+                                        "/share/doc/" tex-directory))
+                    (out (string-append #$output "/share/texmf-dist/tex/"
+                                        tex-directory)))
+                (install-file "paralist.pdf" doc)
+                (install-file (car (find-files (getenv "ROOT_DIR") "README"))
+                              doc)
+                (install-file "paralist.sty" out)))))))
+    (native-inputs (list texlive-latex-base
+                         (texlive-updmap.cfg
+                          (list texlive-cm
+                                texlive-jknappen))))
+    (home-page "https://ctan.org/pkg/paralist")
+    (synopsis "Enumerate and itemize within paragraphs")
+    (description "The @code{paralist} package provides enumerate and itemize
+environments that can be used within paragraphs to format the items either as
+running text or as separate paragraphs with a preceding number or symbol.  It
+also provides compacted versions of enumerate and itemize.")
+    (license license:lppl1.0+)))
+
+(define-public texlive-polyglossia
+  (package
+    (inherit (simple-texlive-package
+              "texlive-polyglossia"
+              (list "source/latex/polyglossia/"
+                    ;; These files are not part of polyglossia.dtx
+                    "tex/latex/polyglossia/arabicnumbers.sty"
+                    "tex/latex/polyglossia/xpg-cyrillicnumbers.sty")
+              (base32 "1p0hhclypv2zbs8h64c6sd689m9ym3vvpn966qpwpjxbymsrc49g")))
+    (outputs '("out" "doc"))
+    (arguments
+     (list
+      #:tex-directory "latex/polyglossia"
+      #:tex-format "xelatex"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'build-and-install-xelatex.fmt
+            (lambda* (#:key tex-format #:allow-other-keys)
+              (invoke "fmtutil-sys" "--byfmt" tex-format "--fmtdir=web2c")
+              ;; Extend the current TEXMF environment variable to make
+              ;; available the newly built formats.
+              (setenv "GUIX_TEXMF" (string-append (getcwd) ":"
+                                                  (getenv "GUIX_TEXMF")))
+              ;; XXX: Extend the base (more limited) xelatex.fmt provided by
+              ;; texlive-latex-base, otherwise packages using Polyglossia
+              ;; would encounter the same lack of hyphenation support problem.
+              (install-file "web2c/xetex/xelatex.fmt"
+                            (string-append #$output
+                                           "/share/texmf-dist/web2c/xetex"))))
+          (add-before 'build 'chdir
+            (lambda _
+              ;; This is so the build can find the files not part of the .dtx.
+              (setenv "TEXINPUTS" (string-append (getcwd)
+                                                 "/tex/latex/polyglossia:"))
+              (chdir "source/latex/polyglossia")))
+          (add-after 'chdir 'substitute-nonfree-fonts
+            (lambda _
+              (substitute* "polyglossia.dtx"
+                (("\\{Serto Jerusalem}")
+                 "{FreeSans}"))))
+          (add-after 'substitute-nonfree-fonts 'extract-dtx
+            (lambda* (#:key tex-format #:allow-other-keys)
+              (invoke tex-format "polyglossia.dtx")))
+          (add-after 'install 'install-doc
+            (lambda* (#:key outputs tex-directory #:allow-other-keys)
+              (let ((doc (string-append (assoc-ref outputs "doc")
+                                        "/share/texmf-dist/doc" tex-directory)))
+                (install-file "README.md" doc)
+                (install-file "polyglossia.pdf" doc)))))))
+    (native-inputs (list fontconfig     ;for XDG_DATA_DIRS (to locate fonts)
+                         font-amiri
+                         font-dejavu
+                         font-gfs-ambrosia
+                         font-gnu-freefont
+                         font-linuxlibertine
+                         font-sil-ezra
+                         texlive-latex-base
+                         texlive-babel
+                         texlive-bin    ;for fmtutil.cnf
+                         texlive-bidi
+                         texlive-booktabs
+                         texlive-caption
+                         texlive-context
+                         texlive-latex-fancyvrb
+                         texlive-etoolbox
+                         texlive-fonts-latex
+                         texlive-fontspec
+                         texlive-hyperref
+                         ;; TODO: Remove texlive-stringenc and
+                         ;; texlive-zapfding after texlive-hyperref propagates
+                         ;; them.
+                         texlive-stringenc
+                         texlive-zapfding
+                         texlive-latex-graphics
+                         texlive-kpathsea ;for cp227.tcx & friends
+                         texlive-makecmds
+                         texlive-metalogo
+                         texlive-microtype
+                         texlive-paralist
+                         texlive-latex-tools
+                         texlive-tex-ini-files)) ;for pdftexconfig
+    ;; polyglossia.sty \RequirePackage or \\usepackage these other TexLive
+    ;; packages.
+    (propagated-inputs
+     (list texlive-bidi
+           texlive-etoolbox
+           texlive-fontspec
+           texlive-hyperref
+           ;; TODO: Remove texlive-stringenc and
+           ;; texlive-zapfding after texlive-hyperref propagates
+           ;; them.
+           texlive-stringenc
+           texlive-zapfding
+           texlive-makecmds
+           texlive-latex-l3packages     ;expl3, l3keys2e, xparse
+           texlive-latex-tools
+           texlive-latex-xkeyval))
     (home-page "https://www.ctan.org/pkg/polyglossia")
-    (synopsis "Alternative to babel for XeLaTeX and LuaLaTeX")
-    (description
-     "This package provides a complete Babel replacement for users of LuaLaTeX
-and XeLaTeX; it relies on the @code{fontspec} package, version 2.0 at least.")
-    (license license:lppl1.3+)))
+    (synopsis "Alternative to Babel for XeLaTeX and LuaLaTeX")
+    (description "This package provides a complete Babel replacement for users
+of LuaLaTeX and XeLaTeX.  It includes support for over 70 different languages,
+some of which in different regional or national varieties, or using a
+different writing system.  It enables:
+@itemize
+@item
+Loading the appropriate hyphenation patterns.
+@item
+Setting the script and language tags of the current font (if possible and
+available), using the package fontspec.
+@item
+Switching to a font assigned by the user to a particular script or language.
+@item
+Adjusting some typographical conventions in function of the current language
+(such as afterindent, frenchindent, spaces before or after punctuation marks,
+etc.)
+@item
+Redefining the document strings (like @samp{chapter}, @samp{figure},
+@samp{bibliography}).  Adapting the formatting of dates (for non-gregorian
+calendars via external packages bundled with polyglossia: currently the
+Hebrew, Islamic and Farsi calendars are supported).
+@item
+For languages that have their own numeration system, modifying the formatting
+of numbers appropriately.
+@item
+Ensuring the proper directionality if the document contains languages
+written from right to left (via the packages bidi and luabidi, available
+separately).
+@end itemize")
+    (license license:expat)))
+
+(define-deprecated-package texlive-latex-polyglossia texlive-polyglossia)
 
 (define-public texlive-latex-supertabular
   (package
@@ -6486,6 +6972,76 @@ Adobe's basic set.")
     ;; No license version specified.
     (license license:gpl3+)))
 
+(define-public texlive-zref
+  (package
+    (inherit (simple-texlive-package
+              "texlive-zref"
+              (list "doc/latex/zref/"
+                    "source/latex/zref/")
+              (base32 "09l2wrqx0navislkx15iazv7jy0ip8bqaw3c0hjf0jy81kqrrm01")))
+    (outputs '("out" "doc"))
+    (arguments
+     (list
+      #:build-targets #~(list "zref.dtx")
+      #:tex-directory "latex/zref"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'chdir
+            (lambda _
+              (setenv "ROOT_DIR" (getcwd))
+              (chdir "source/latex/zref")))
+          (add-after 'install 'install-doc
+            (lambda* (#:key outputs #:allow-other-keys)
+              (define doc (string-append (assoc-ref outputs "doc")
+                                         "/share/texmf-dist/doc"))
+              (mkdir-p doc)
+              (copy-recursively (string-append (getenv "ROOT_DIR") "/doc")
+                                doc))))))
+    (propagated-inputs (list texlive-generic-atbegshi
+                             texlive-generic-gettitlestring
+                             texlive-generic-iftex
+                             texlive-latex-atveryend
+                             texlive-latex-kvoptions
+                             texlive-latex-pdftexcmds
+                             texlive-latex-xkeyval))
+    (home-page "https://github.com/ho-tex/zref")
+    (synopsis "Reference scheme for LaTeX")
+    (description "This package offers a means to remove the limitation, of
+only two properties, that is inherent in the way LaTeX's reference system
+works.  The package implements an extensible referencing system, where
+properties may be defined and used in the course of a document.  It provides
+an interface for macro programmers to access the new reference scheme and some
+modules that use it.  Modules available are:
+@table @code
+@item zref-user
+use zref for traditional labels and references;
+@item zref-abspage
+retrieve absolute page numbers (physical pages, as opposed to the logical page
+number that is normally typeset when a page number is requested;
+@item zref-lastpage
+provide a zref-label for the last page of the document;
+@item zref-nextpage
+provide the page number of the next page of the document;
+@item zref-totpages
+provide the total number of pages in the document;
+@item zref-pagelayout
+provide the page layout parameters of a each page (which may then be printed
+at the end of the document);
+@item zref-perpage
+make a counter reset for each new page;
+@item zref-titleref
+make section title or caption text available through the reference system;
+@item zref-savepos
+make positions on a page available;
+@item zref-dotfill
+controlled dot-filling
+@item zref-env
+record the latest environment's name and the line it started on;
+@item zref-xr
+provide the facilities of the xr and xr-hyper packages.
+@end table")
+    (license license:lppl1.3c+)))
+
 (define-deprecated-package texlive-fonts-adobe-zapfding texlive-zapfding)
 
 (define-public texlive-fonts-rsfs
@@ -6803,6 +7359,41 @@ use this package to insert PostScript files, in addition to PDF files.")
 
 (define-deprecated-package texlive-latex-pdfpages texlive-pdfpages)
 
+(define-public texlive-stix2-otf
+  (let ((base (simple-texlive-package
+               "texlive-stix2-otf"
+               (list "/doc/fonts/stix2-otf/"
+                     "/fonts/opentype/public/stix2-otf/")
+               (base32 "0i7rd1wn5jgm3gbi779gy78apz63w034ck4pn73xw6s10zgjzmgl")
+               ;; Building these fonts requires FontLab, which is nonfree.
+               #:trivial? #t)))
+    (package
+      (inherit base)
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:phases phases)
+          #~(modify-phases #$phases
+              (add-after 'install 'symlink-fonts-to-system-fonts-prefix
+                ;; This is so that fontconfig can locate the fonts, such as
+                ;; when using xetex or xelatex.
+                (lambda _
+                  (let ((system-fonts-prefix (string-append #$output
+                                                            "/share/fonts")))
+                    (mkdir-p system-fonts-prefix)
+                    (symlink (string-append
+                              #$output "/share/texmf-dist/fonts/opentype"
+                              "/public/stix2-otf")
+                             (string-append system-fonts-prefix
+                                            "/stix2-otf")))))))))
+      (home-page "https://www.stixfonts.org/")
+      (synopsis "OpenType Unicode text and maths fonts")
+      (description "The Scientific and Technical Information eXchange (STIX)
+fonts are intended to satisfy the demanding needs of authors, publishers,
+printers, and others working in the scientific, medical, and technical fields.
+They combine a comprehensive Unicode-based collection of mathematical symbols
+and alphabets with a set of text faces suitable for professional publishing.")
+      (license license:silofl1.1))))
+
 (define-public texlive-stmaryrd
   (let ((template (simple-texlive-package
                    "texlive-stmaryrd"
@@ -10715,6 +11306,59 @@ provided box macros are @code{\\lapbox}, @code{\\marginbox},
 @code{\\minsizebox}, @code{\\maxsizebox} and @code{\\phantombox}.")
       (license license:lppl1.3))))
 
+(define-public texlive-qrcode
+  (package
+    (inherit (simple-texlive-package
+              "texlive-qrcode"
+              (list "doc/latex/qrcode/README"
+                    "source/latex/qrcode/qrcode.dtx"
+                    "source/latex/qrcode/qrcode.ins")
+              (base32
+               "1xfv0imrrbxjqwjapcf2silg19rwz2jinawy1x65c1krg919vn02")))
+    (outputs '("out" "doc"))
+    (arguments
+     (list
+      #:tex-directory "latex/qrcode"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'build 'chdir
+            (lambda _
+              (setenv "ROOT_DIR" (getcwd))
+              (chdir "source/latex/qrcode")))
+          (add-after 'build 'build-doc
+            (lambda _
+              (copy-file "qrcode.dtx" "build/qrcode.dtx")
+              (chdir "build")
+              (invoke "xelatex" "qrcode.dtx")
+              (invoke "xelatex" "qrcode.dtx"))) ;generate qrcode.pdf
+          (replace 'install
+            (lambda* (#:key tex-directory #:allow-other-keys)
+              (let ((doc (string-append #$output:doc "/share/doc/"
+                                        tex-directory))
+                    (out (string-append #$output "/share/texmf-dist/tex/"
+                                        tex-directory)))
+                (install-file "qrcode.pdf" doc)
+                (install-file (car (find-files (getenv "ROOT_DIR") "README"))
+                              doc)
+                (install-file "qrcode.sty" out)))))))
+    (propagated-inputs
+     (list texlive-lm
+           texlive-latex-xkeyval
+           texlive-xcolor))
+    (native-inputs
+     (list (texlive-updmap.cfg (list texlive-lm texlive-zapfding))
+           texlive-hyperref
+           texlive-latex-xkeyval
+           texlive-stringenc
+           texlive-xcolor))
+    (home-page "https://www.ctan.org/pkg/qrcode")
+    (synopsis "QR codes without external tools")
+    (description "This package creates @acronym{QR,Quick Response} codes for
+LaTeX documents without depending on external graphics packages.  It supports
+generating codes of different sizes and with different error correction
+levels.  All functionality is provided by the single @code{\\qrcode} command.")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-tcolorbox
   (let ((template (simple-texlive-package
                    "texlive-tcolorbox"
@@ -10891,6 +11535,57 @@ on the page, and which specifies where it is to be placed.  The environment is
 accompanied by various configuration commands.")
     (license license:lppl)))
 
+(define-public texlive-unicode-math
+  (package
+    (inherit (simple-texlive-package
+              "texlive-unicode-math"
+              (list "source/latex/unicode-math/"
+                    "doc/latex/unicode-math/"
+                    "tex/latex/unicode-math/unicode-math-table.tex")
+              (base32 "1j3041dcm7wqj0x26rxm9bb7q4xa1rqsqynqdb6cbjk3jmfvskxn")))
+    (outputs '("out" "doc"))
+    (arguments
+     (list
+      #:tex-directory "latex/unicode-math"
+      #:tex-format "xelatex"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'copy-files
+            ;; The documentation isn't built.
+            (lambda* (#:key outputs tex-directory #:allow-other-keys)
+              (let ((doc (assoc-ref outputs "doc"))
+                    (tex (string-append #$output "/share/texmf-dist/tex/"
+                                        tex-directory)))
+                ;; Install documentation.
+                (mkdir-p (string-append doc "/share/texmf-dist/doc" ))
+                (copy-recursively "doc" doc)
+                ;; Install unicode-math-table.tex, which is not
+                ;; built.
+                (install-file "tex/latex/unicode-math/unicode-math-table.tex"
+                              tex))))
+          (add-after 'copy-files 'chdir
+            (lambda* (#:key tex-directory #:allow-other-keys)
+              (chdir (string-append "source/" tex-directory)))))))
+    (home-page "https://ctan.org/pkg/unicode-math")
+    (synopsis "Unicode mathematics support for XeTeX and LuaTeX")
+    (description "This package will provide a complete implementation of
+Unicode maths for XeLaTeX and LuaLaTeX.  Unicode maths is currently supported
+by the following fonts:
+@itemize
+@item Latin Modern Math
+@item TeX Gyre Bonum Math
+@item TeX Gyre Pagella Math
+@item TeX Gyre Schola Math
+@item TeX Gyre Termes Math
+@item DejaVu Math TeX Gyre
+@item Asana-Math
+@item STIX
+@item XITS Math
+@item Libertinus Math
+@item Fira Math
+@end itemize")
+    (license license:lppl1.3c+)))
+
 (define-public texlive-xifthen
   (package
     (inherit (simple-texlive-package
@@ -10912,6 +11607,54 @@ the package @code{calc}, together with the ability of defining new commands to
 handle complex tests.")
     (license license:lppl)))
 
+(define-public texlive-xindy
+  (package
+    (name "texlive-xindy")
+    (version "2.5.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://ctan/indexing/xindy/base/xindy-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0hxsx4zw19kmixkmrln17sxgg1ln4pfp4lpfn5v5fyr1nwfyk3ic"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:configure-flags #~(list "--enable-docs")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-clisp
+            (lambda* (#:key inputs #:allow-other-keys)
+              ;; The xindy.in file is encoded in ISO-8859-1 (or iso-latin-1).
+              (with-fluids ((%default-port-encoding "ISO-8859-1"))
+                (substitute* "user-commands/xindy.in"
+                  (("(our \\$clisp = ).*" _ head)
+                   (format #f "our $clisp = ~s;~%"
+                           (search-input-file inputs "bin/clisp"))))))))))
+    (native-inputs (list clisp
+                         glibc-locales
+                         perl
+                         texlive-bin
+                         texlive-greek-fontenc
+                         texlive-hyperref
+                         texlive-latex-base
+                         texlive-latex-cyrillic
+                         texlive-latex-geometry
+                         (texlive-updmap.cfg ;fonts
+                          (list texlive-cbfonts
+                                texlive-lh
+                                texlive-jknappen))))
+    (inputs (list clisp perl))          ;used at run time
+    (home-page "https://www.ctan.org/pkg/xindy")
+    (synopsis "General-purpose index processor")
+    (description "Xindy was developed after an impasse had been encountered in
+the attempt to complete internationalisation of @command{makeindex}.  Xindy
+can be used to process indexes for documents marked up using (La)TeX, Nroff
+family and SGML-based languages.  Xindy is highly configurable, both in markup
+terms and in terms of the collating order of the text being processed.")
+    (license license:gpl2+)))
+
 (define-public bibtool
   (package
     (name "bibtool")