gnu: Add texlive-amsfonts/patched.

* gnu/packages/tex.scm (texlive-amsfonts/patched): New variable.
This commit is contained in:
Ricardo Wurmus 2021-05-05 15:28:06 +02:00
parent 56e4d7204b
commit 9db6798824
No known key found for this signature in database
GPG key ID: 197A5888235FACAC

View file

@ -1227,6 +1227,156 @@ (define-public texlive-amsfonts
details can be found in the documentation.")
(license license:silofl1.1))))
;; 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
(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/")
(base32
"15q70nkjf8wqzbd5ivcdx3i2sdgqxjb38q0qn9a2qw9i0qcnx6zw"))))
(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)
(guix build utils)
(ice-9 match)
(srfi srfi-1)
(srfi srfi-26)))
((#:phases phases)
`(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")))
(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 "(cmextra|cyrillic|dummy|euler|symbols)"
"\\.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))))))
#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))))))
(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")
(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))))
(define-public texlive-fonts-amsfonts
(deprecated-package "texlive-fonts-amsfonts" texlive-amsfonts))