W Emacs, w jaki sposób można dodać niestandardowe czcionki TrueType do ps-print?

3

Dostosowuję Emacsa do drukowania Postscriptum z niestandardowymi twarzami. znalazłem to odniesienie , który wyjaśnia, jak dodać Helvetica. Do emacs ps-print.

Próbuję użyć Consolas , więc użyłem następującego kodu:

;; Add Consolas to supported printing fonts.
(require 'ps-print)
(setq ps-font-info-database
    (append
        '((Consolas
            (fonts  (normal      . "Consolas")
                    (bold        . "Consolas-Bold")
                    (italic      . "Consolas-Italic")
                    (bold-italic . "Consolas-BoldItalic"))
            (size . 10.0)
            (line-height . 10.48)
            (space-width . 5.51719)
            (avg-char-width . 5.51719)))
        ps-font-info-database))

Dokument zostanie wydrukowany bez błędów, ale zamiast Consoli używa czcionek domyślnych. Kiedy konwertuję dokument PostScript na PDF, a następnie kopiuję tekst z pliku PDF do OpenOffice , Dostaję Consolas, ale w pliku PDF tekst wyświetla się jako coś podobnego Kurier .

Jakich nazw użyć? Jest Consolas-bold źle? Nie mogłem znaleźć niczego w Internecie na temat tego problemu.

Clément
źródło
wiem nic o emacs, ale czy wypróbowałeś to bez kresek, np. "Consolas Bold"?
Jared Harley

Odpowiedzi:

0

Powodem, dla którego powyższy kod zadziałałby dla Helvetica jest to, że Helvetica jest jedną ze standardowych czcionek w PostScript. Zwykle masz trzy czcionki, które są zawsze dostępne w PostScript - Times Roman, Helvetica i Courier.

Dodawanie nowych czcionek zależy od oprogramowania. Niektóre pobierze PostScript Type 1 czcionkę do urządzenia docelowego ( TTF czcionki są zwykle konwertowane przed pobraniem), ale zależy to od posiadania urządzenia docelowego, które może akceptować czcionki. Innym sposobem jest, aby oprogramowanie narysowało dokument jako serię wektorów.

PDF używa podobnego systemu do pierwszego sposobu, w którym może osadzić czcionkę (lub jej podzestaw, aby zaoszczędzić miejsce) w dokumencie.

Nie bardzo wiem, jak to zrobić w Emacsie, ale oczekiwałbym, że powinieneś powiedzieć Emacsowi, gdzie znajduje się czcionka i jak ją osadzić - może nawet wcześniej ją przekonwertować na PostScript Type 1.

TBH , najlepiej przeanalizuj LaTeX dla drukowania PostScript / PDF.

Majenko
źródło
Dziękuję za odpowiedź! Jednak Emacs jest obecnie jedynym programem do implementacji podświetlania składni dla mojego języka, stąd moje pragnienie wydrukowania z niego pdf. Próbowałem zainstalować czcionkę w ghostscript, ale nie mogłem wymyślić, jak to zrobić. Czy możesz podać mi kilka szczegółów? Wszystko, co robi Emacs, generuje postscript, a następnie wywołuje ps2pdf z pakietu ghostscipt.
Clément
2

To zadziałało dla mnie (Emacs 23.3.1 / Windows 7 64x) [wciąż zmagający się z kolorowym wyjściem]:

;; Printing
(require 'ps-print)
(setq printer-name '"USB001")
(setq ps-printer-name t)
(setq ps-lpr-command "g:/dev/bin/ghostscript/gs9.04/bin/gswin64c.exe")
(setq ps-lpr-switches '("-q" "-dNOPAUSE" "-dBATCH"
                        "-sDEVICE=mswinpr2"))
;; Add Consolas 
(setq ps-font-info-database
      (append
       '((Consolas
          (fonts (normal      . "Consolas")
                 (bold        . "Consolas-Bold")
                 (italic      . "Consolas-Italic")
                 (bold-italic . "Consolas-Bold-Italic"))
          (size           . 11.0)
          (line-height    . 13.0)
          (space-width    . 6.04688)
          (avg-char-width . 6.04688)))
       ps-font-info-database))
(setq ps-font-family 'Consolas)
(setq ps-font-size 11)

;; Print in color
(setq-default ps-print-color-p t)

;; Page layout: Header [file-name     2011-12-05]
;;              Footer [                     n/m]

;; Header
(setq ps-header-lines 1)
(setq ps-header-font-size 11)
(setq ps-header-title-font-size 11)
(setq ps-header-font-family 'Consolas)
(setq ps-right-header '(ps-time-stamp-yyyy-mm-dd))
(setq ps-print-header-frame nil)        ; no box top

;; Footer
(setq ps-footer-lines 1)
(setq ps-footer-font-size 11)
(setq ps-footer-font-family 'Consolas)
(setq ps-print-footer t)
(setq ps-left-footer nil)
(setq ps-right-footer (list "/pagenumberstring load"))
(setq ps-footer-offset .50)
(setq ps-footer-line-pad .50)
(setq ps-print-footer-frame nil)        ; no box bottom

;; Keystroke to print
(global-set-key (kbd "C-|")  'ps-print-buffer-with-faces)

Powodzenia!

23emacs
źródło
1

4 lata później, myślę, że najlepszym sposobem, aby to osiągnąć, jest drukowanie z zewnątrz Emacs.

Zamiast generować .ps z Emacsa, najpierw wygeneruj kopię html bufora (używając htmlfontify-buffer ), a następnie wydrukuj z ulubionej przeglądarki internetowej.

Clément
źródło
Czy możesz podać kilka szczegółów na temat tego, co to oznacza?
Scott
@Scott: Gotowe; lepszy?
Clément
Chyba tak
Scott