diff options
Diffstat (limited to 'gnu/packages/tex.scm')
-rw-r--r-- | gnu/packages/tex.scm | 465 |
1 files changed, 431 insertions, 34 deletions
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm index 40d80b4727..d4e2075975 100644 --- a/gnu/packages/tex.scm +++ b/gnu/packages/tex.scm @@ -6,7 +6,7 @@ ;;; Copyright © 2016, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2016 Federico Beffa <beffa@fbengineering.ch> ;;; Copyright © 2016 Thomas Danckaert <post@thomasdanckaert.be> -;;; Copyright © 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2017 Leo Famulari <leo@famulari.name> ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com> ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr> @@ -49,6 +49,7 @@ #:use-module (gnu packages fontutils) #:use-module (gnu packages gd) #:use-module (gnu packages ghostscript) + #:use-module (gnu packages graphviz) #:use-module (gnu packages gtk) #:use-module (gnu packages icu4c) #:use-module (gnu packages image) @@ -60,6 +61,7 @@ #:use-module (gnu packages perl-check) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) + #:use-module (gnu packages python-xyz) #:use-module (gnu packages qt) #:use-module (gnu packages ruby) #:use-module (gnu packages shells) @@ -214,6 +216,11 @@ (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/") @@ -234,6 +241,15 @@ (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. @@ -651,6 +667,154 @@ display, and mathematical fonts in a range of styles, based on Monotype Modern 8A.") (license license:knuth))) +(define-public texlive-fonts-cm-super + (package + (name "texlive-fonts-cm-super") + (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/latex/cm-super")) + (revision %texlive-revision))) + (file-name (string-append name "-" version "-checkout")) + (sha256 + (base32 + "0ybb4gi2rblzpb6wfzm2wk7dj3y2jnmkzsla7mz7g3zc12y4r2b9")))) + (build-system trivial-build-system) + (arguments + `(#:modules ((guix build utils) + (ice-9 match)) + #:builder + (begin + (use-modules (guix build utils) + (ice-9 match)) + (let ((root (string-append (assoc-ref %outputs "out") + "/share/texmf-dist/")) + (pkgs '(("source" . "tex/latex/cm-super") + ("cm-super-afm" . "fonts/afm/public/cm-super") + ("cm-super-type1" . "fonts/type1/public/cm-super") + ("cm-super-enc" . "fonts/enc/dvips/cm-super") + ("cm-super-map" . "fonts/map/dvips/cm-super") + ("cm-super-vtex" . "fonts/map/vtex/cm-super")))) + (for-each (match-lambda + ((pkg . dir) + (let ((target (string-append root dir))) + (mkdir-p target) + (copy-recursively (assoc-ref %build-inputs pkg) + target)))) + pkgs) + #t)))) + (native-inputs + `(("cm-super-vtex" + ,(origin + (method svn-fetch) + (uri (svn-reference + (url (string-append "svn://www.tug.org/texlive/tags/" + %texlive-tag "/Master/texmf-dist/" + "/fonts/map/vtex/cm-super")) + (revision %texlive-revision))) + (file-name (string-append name "-map-vtex-" version "-checkout")) + (sha256 + (base32 + "14c9allsgfv6za9wznz4cxqxwz5nsmj8rnwvxams8fhs5rvglxqi")))) + ("cm-super-afm" + ,(origin + (method svn-fetch) + (uri (svn-reference + (url (string-append "svn://www.tug.org/texlive/tags/" + %texlive-tag "/Master/texmf-dist/" + "/fonts/afm/public/cm-super")) + (revision %texlive-revision))) + (file-name (string-append name "-afm-" version "-checkout")) + (sha256 + (base32 + "048ih65f2nghdabdar2p957c4s2spgllmy2gxdscddwqpnmd26yn")))) + ("cm-super-type1" + ,(origin + (method svn-fetch) + (uri (svn-reference + (url (string-append "svn://www.tug.org/texlive/tags/" + %texlive-tag "/Master/texmf-dist/" + "/fonts/type1/public/cm-super")) + (revision %texlive-revision))) + (file-name (string-append name "-type1-" version "-checkout")) + (sha256 + (base32 + "1140swk3w2ka0y4zdsq6pdifrdanb281q71p5gngbbjxdxjxf4qx")))) + ("cm-super-map" + ,(origin + (method svn-fetch) + (uri (svn-reference + (url (string-append "svn://www.tug.org/texlive/tags/" + %texlive-tag "/Master/texmf-dist/" + "/fonts/map/dvips/cm-super")) + (revision %texlive-revision))) + (file-name (string-append name "-map-" version "-checkout")) + (sha256 + (base32 + "10r6xqbwf9wk3ylg7givwyrw1952zydc6p7fw29zjf8ijl0lndim")))) + ("cm-super-enc" + ,(origin + (method svn-fetch) + (uri (svn-reference + (url (string-append "svn://www.tug.org/texlive/tags/" + %texlive-tag "/Master/texmf-dist/" + "/fonts/enc/dvips/cm-super")) + (revision %texlive-revision))) + (file-name (string-append name "-enc-" version "-checkout")) + (sha256 + (base32 + "1pgksy96gfgyjxfhs2k04bgg7nr7i128y01kjcahr7n38080h4ij")))))) + (home-page "https://www.ctan.org/pkg/cm-super") + (synopsis "Computer Modern Super family of fonts") + (description "The CM-Super family provides Adobe Type 1 fonts that replace +the T1/TS1-encoded Computer Modern (EC/TC), T1/TS1-encoded Concrete, +T1/TS1-encoded CM bright and LH Cyrillic fonts (thus supporting all European +languages except Greek), and bringing many ameliorations in typesetting +quality. The fonts exhibit the same metrics as the METAFONT-encoded +originals.") + ;; With font exception + (license license:gpl2+))) + +(define-public texlive-fonts-lm + (package + (name "texlive-fonts-lm") + (version "2.004") + (source (origin + (method url-fetch) + (uri (string-append "http://www.gust.org.pl/projects/e-foundry/" + "latin-modern/download/lm" version "bas.zip")) + (sha256 + (base32 + "0z2s253y751m2ci5aw8nq0sf2kyg9hpimv2gyixkch9d07m2b9wp")))) + (build-system trivial-build-system) + (arguments + `(#:modules ((guix build utils)) + #:builder + (begin + (use-modules (guix build utils)) + (let ((root (string-append (assoc-ref %outputs "out") + "/share/texmf-dist/"))) + (mkdir-p root) + (with-directory-excursion root + (invoke (string-append (assoc-ref %build-inputs "unzip") + "/bin/unzip") + (assoc-ref %build-inputs "source"))) + #t)))) + (native-inputs + `(("unzip" ,unzip))) + (home-page "http://www.gust.org.pl/projects/e-foundry/latin-modern/") + (synopsis "Latin Modern family of fonts") + (description "The Latin Modern fonts are derived from the famous Computer +Modern fonts designed by Donald E. Knuth and described in Volume E of his +Computers & Typesetting series.") + ;; 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-fonts-knuth-lib (package (name "texlive-fonts-knuth-lib") @@ -850,21 +1014,34 @@ symbol fonts.") (find-files "." "[0-9]+\\.mf$")) #t)) (replace 'install - (lambda* (#:key outputs #:allow-other-keys) + (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) - (tfm (string-append - out "/share/texmf-dist/fonts/tfm/public/amsfonts")) - (mf (string-append - out "/share/texmf-dist/fonts/source/public/amsfonts"))) + (fonts (string-append out "/share/texmf-dist/fonts")) + (tfm (string-append fonts "/tfm/public/amsfonts")) + (mf (string-append fonts "/source/public/amsfonts")) + (type1 (string-append fonts "/type1/public/amsfonts"))) (for-each (cut install-file <> tfm) (find-files "build" "\\.*")) (for-each (cut install-file <> mf) (find-files "." "\\.mf")) + (copy-recursively (assoc-ref inputs "amsfonts-type1") type1) #t)))))) (native-inputs `(("texlive-fonts-cm" ,texlive-fonts-cm) ("texlive-metafont-base" ,texlive-metafont-base) - ("texlive-bin" ,texlive-bin))) + ("texlive-bin" ,texlive-bin) + ("amsfonts-type1" + ,(origin + (method svn-fetch) + (uri (svn-reference + (url (string-append "svn://www.tug.org/texlive/tags/" + %texlive-tag "/Master/texmf-dist/" + "/fonts/type1/public/amsfonts")) + (revision %texlive-revision))) + (file-name (string-append name "-type1-" version "-checkout")) + (sha256 + (base32 + "1zfz33vn6gm19njy74n8wmn7sljrimfhwns5z8qqhxqfh1g4qip2")))))) (home-page "https://www.ctan.org/pkg/amsfonts") (synopsis "TeX fonts from the American Mathematical Society") (description @@ -1065,6 +1242,22 @@ book).") target)) '("ltxguide.cls" "ltnews.cls" "minimal.cls" "idx.tex" "lablst.tex" "testpage.tex" "ltxcheck.tex")) + ;; Install configurations + (copy-recursively + (assoc-ref inputs "texlive-latex-latexconfig") + (string-append out "/share/texmf-dist/tex/latex/latexconfig")) + (copy-recursively + (assoc-ref inputs "texlive-generic-config") + (string-append out "/share/texmf-dist/tex/generic/config")) + (copy-recursively + (assoc-ref inputs "texlive-generic-hyphen") + (string-append out "/share/texmf-dist/tex/generic/hyphen")) + (copy-recursively + (assoc-ref inputs "texlive-generic-ruhyphen") + (string-append out "/share/texmf-dist/tex/generic/ruhyphen")) + (copy-recursively + (assoc-ref inputs "texlive-generic-ukrhyph") + (string-append out "/share/texmf-dist/tex/generic/ukrhyph")) #t)))))) (native-inputs `(("texlive-bin" ,texlive-bin) @@ -1074,7 +1267,6 @@ book).") ("texlive-latex-latexconfig" ,(texlive-dir "tex/latex/latexconfig/" "1zb3j49cj8p75yph6c8iysjp7qbdvghwf0mn9j0l7qq3qkbz2xaf")) - ("texlive-generic-hyph-utf8" ,texlive-generic-hyph-utf8) ("texlive-generic-hyphen" ,(texlive-dir "tex/generic/hyphen/" "0xim36wybw2625yd0zwlp9m2c2xrcybw58gl4rih9nkph0wqwwhd")) @@ -1103,6 +1295,8 @@ book).") ("texlive-fonts-cm" ,texlive-fonts-cm) ("texlive-fonts-latex" ,texlive-fonts-latex) ("texlive-fonts-knuth-lib" ,texlive-fonts-knuth-lib))) + (propagated-inputs + `(("texlive-generic-hyph-utf8" ,texlive-generic-hyph-utf8))) (home-page "https://www.ctan.org/pkg/latex-base") (synopsis "Base sources of LaTeX") (description @@ -1508,7 +1702,7 @@ that the LaTeX3 conventions can be used with regular LaTeX 2e packages.") ":"))) #t))) )) - (inputs + (propagated-inputs `(("texlive-latex-l3kernel" ,texlive-latex-l3kernel))) (home-page "https://www.ctan.org/pkg/l3packages") (synopsis "High-level LaTeX3 concepts") @@ -1541,9 +1735,37 @@ programming tools and kernel support. Packages provided in this release are: "1p0mkn6iywl0k4m9cx3hnhylpi499inisff3f72pcf349baqsnvq")))) (build-system texlive-build-system) (arguments - '(#:tex-directory "latex/fontspec")) - (inputs - `(("texlive-latex-l3kernel" ,texlive-latex-l3kernel))) + '(#: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 @@ -1591,6 +1813,98 @@ 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.git") + (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))))) + (native-inputs + `(("zip" ,zip) + ("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") + (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))) + (define-public texlive-latex-amsmath (package (name "texlive-latex-amsmath") @@ -1701,6 +2015,29 @@ for British English and Australian text, and default (\"american\") patterns for Canadian and USA text.") (license license:lppl1.3+))) +(define-public texlive-generic-babel-german + (package + (name "texlive-generic-babel-german") + (version (number->string %texlive-revision)) + (source (origin + (method svn-fetch) + (uri (texlive-ref "generic" "babel-german")) + (file-name (string-append name "-" version "-checkout")) + (sha256 + (base32 + "0h47s67gnhdaxfgbf8pirp5vw4z6rrhxl8zav803yjxka0096i3y")))) + (build-system texlive-build-system) + (arguments '(#:tex-directory "generic/babel-german")) + (home-page "https://www.ctan.org/pkg/babel-german") + (synopsis "Babel support for German") + (description + "This package provides the language definition file for support of German +in @code{babel}. It provides all the necessary macros, definitions and +settings to typeset German documents. The bundle includes support for the +traditional and reformed German orthography as well as for the Austrian and +Swiss varieties of German.") + (license license:lppl1.3+))) + (define-public texlive-latex-cyrillic (package (name "texlive-latex-cyrillic") @@ -1749,31 +2086,59 @@ font metrics. The bundle as a whole is part of the LaTeX required set of packages.") (license license:lppl1.2+))) +;; For user profiles +(define-public texlive-base + (let ((default-packages + (list texlive-bin + texlive-dvips + texlive-fontname + texlive-fonts-cm + texlive-fonts-latex + texlive-metafont-base + texlive-latex-base + ;; LaTeX packages from the "required" set. + texlive-latex-amsmath + texlive-latex-amscls + texlive-latex-babel + texlive-generic-babel-english + texlive-latex-cyrillic + texlive-latex-graphics + texlive-latex-psnfss + texlive-latex-tools))) + (package + (name "texlive-base") + (version (number->string %texlive-revision)) + (source #f) + (build-system trivial-build-system) + (arguments + '(#:builder + (begin (mkdir (assoc-ref %outputs "out"))))) + (propagated-inputs + (map (lambda (package) + (list (package-name package) package)) + default-packages)) + (home-page (package-home-page texlive-bin)) + (synopsis "TeX Live base packages") + (description "This is a very limited subset of the TeX Live distribution. +It includes little more than the required set of LaTeX packages.") + (license (fold (lambda (package result) + (match (package-license package) + ((lst ...) + (append lst result)) + ((? license:license? license) + (cons license result)))) + '() + default-packages))))) + +;; For use in package definitions only (define-public texlive-union (lambda* (#:optional (packages '())) "Return 'texlive-union' package which is a union of PACKAGES and the standard LaTeX packages." - (let ((default-packages - (list texlive-bin - texlive-dvips - texlive-fontname - texlive-fonts-cm - texlive-fonts-latex - texlive-metafont-base - texlive-latex-base - ;; LaTeX packages from the "required" set. - texlive-latex-amsmath - texlive-latex-amscls - texlive-latex-babel - texlive-generic-babel-english - texlive-latex-cyrillic - texlive-latex-graphics - texlive-latex-psnfss - texlive-latex-tools))) - (package + (let ((default-packages (match (package-propagated-inputs texlive-base) + (((labels packages) ...) packages)))) + (package (inherit texlive-base) (name "texlive-union") - (version (number->string %texlive-revision)) - (source #f) (build-system trivial-build-system) (arguments '(#:modules ((guix build union) @@ -1815,8 +2180,8 @@ standard LaTeX packages." "/bin")) (for-each (cut wrap-program <> - `("TEXMFCNF" ":" = (,(dirname texmf.cnf))) - `("TEXMF" ":" = (,(string-append out "/share/texmf-dist")))) + `("TEXMFCNF" ":" suffix (,(dirname texmf.cnf))) + `("TEXMF" ":" suffix (,(string-append out "/share/texmf-dist")))) (find-files (string-append out "/bin") ".*")) #t)))) (inputs @@ -1837,6 +2202,7 @@ distribution.") '() (append default-packages packages))))))) +;; For use in package definitions only (define-public texlive-tiny (package (inherit (texlive-union)) @@ -4110,6 +4476,11 @@ directly generate PDF documents instead of DVI.") #:phases (modify-phases (map (cut assq <> %standard-phases) '(set-paths unpack patch-source-shebangs)) + (add-after 'unpack 'unset-environment-variables + (lambda _ + (unsetenv "TEXMF") + (unsetenv "TEXMFCNF") + #t)) (add-after 'patch-source-shebangs 'install (lambda* (#:key outputs #:allow-other-keys) (let ((share (string-append (assoc-ref outputs "out") "/share"))) @@ -4683,6 +5054,32 @@ space. If there is not enough space between the command and the bottom of the page, a new page will be started.") (license license:lppl))) +(define-public texlive-latex-changepage + (package + (name "texlive-latex-changepage") + (version (number->string %texlive-revision)) + (source + (origin + (method svn-fetch) + (uri (texlive-ref "latex" "changepage")) + (sha256 + (base32 + "1rpw8xg5p4jsyh236jma9dz3l29wjx4062f154b3wak5yjcxyxyb")))) + (build-system texlive-build-system) + (arguments + '(#:tex-directory "latex/changepage" + #:tex-format "latex")) + (inputs + `(("texlive-latex-filecontents" ,texlive-latex-filecontents))) + (home-page "https://www.ctan.org/pkg/changepage") + (synopsis "Margin adjustment and detection of odd/even pages") + (description + "The package provides commands to change the page layout in the middle of +a document, and to robustly check for typesetting on odd or even pages. +Instructions for use are at the end of the file. The package is an extraction +of code from the @code{memoir} class, whose user interface it shares.") + (license license:lppl1.3+))) + (define-public texlive-latex-eukdate (package (name "texlive-latex-eukdate") |