
Ich möchte aus einer TeX-Quelle ein ansprechendes PDF-Dokument erstellen. Die TeX-Datei besteht hauptsächlich aus ASCII-Text mit wenigen Nicht-ASCII-Symbolen (Pfeile in Schemata, benutzerdefinierte Aufzählungszeichen zur Markierung von Listenelementen, Hieroglyphen im Namen des Mitwirkenden im Abschnitt „Credits“ usw.).
Der TeX-Quellcode wird wiederum von Sphinx aus den ersten Quellen erstellt.
Die Nicht-ASCII-Symbole werden im Ausgabe-PDF nicht gedruckt, da in der im gesamten Dokument verwendeten Schriftart standardmäßig keine Glyphen für sie vorhanden sind.
Also habe ich ein Shell-Skript erstellt, das das Installationsverzeichnis von TeX Live nach .pfb-, .otf- und .ttf-Dateien durchsucht und für jede gefundene Schriftart ein TeX-Dokument wie dieses erstellt:
\documentclass{article}
\usepackage[english]{babel}
\usepackage{fontspec}
\usepackage{multido}
\font\testedfont="[/usr/share/texlive/texmf-dist/fonts/type1/wadalab/dgj/dgjkj.pfb]"
\font\basictextfont="cmr10"
\title{Find glyph for Unicode 80A5 in dgjkj.pfb}
\begin{document}
\newcounter{glyphslotnum}
\newcommand\findglyphslotnum{}
\newcounter{totalglyphnum}
\newcommand\findtotalglyphnum{}
Test glyphs
{\basictextfont{Font filename: dgjkj.pfb}}
\testedfont
\renewcommand\findglyphslotnum{\the\XeTeXcharglyph"80A5}
\setcounter{glyphslotnum}{\findglyphslotnum}
\renewcommand\findtotalglyphnum{\the\XeTeXcountglyphs\testedfont}
\setcounter{totalglyphnum}{\findtotalglyphnum}
%\multido{\i=0+1}{\value{totalglyphnum}\relax}{
%{\basictextfont\i:\,}{\testedfont\XeTeXglyph\i}
%}
\basictextfont
dgjkj.pfb: total \number\value{totalglyphnum} glyphs
\ifnum\value{glyphslotnum}>0{\message{Glyph for 80A5 exists in dgjkj.pfb (slot \number\value{glyphslotnum})}Glyph for Unicode 80A5 exists in dgjkj.pfb at slot \number\value{glyphslotnum}.
It looks like [{\testedfont\XeTeXglyph\value{glyphslotnum}}] (by $\backslash$XeTeXglyph)
or [{\testedfont{\char"80A5}}] (by $\backslash$char)
or [{\testedfont{\symbol{"80A5}}}] (by $\backslash$symbol)
}\fi
\end{document}
Die Ausgabe sieht wie folgt aus (hier kopieren:dgjkj.pfb_U80A5.jpg):
Durch das Aufheben der Kommentierung der Multido-Schleife wird die Liste aller Glyphen in der Schriftart bereitgestellt.
Ich habe Schriftarten mit Glyphen für alle Unicode-Symbole gefunden, die ich brauche, aber ich habe ein Problem mit dem Symbol U279C („schwerer, runder Pfeil nach rechts“). Es wurde in der Schriftartdatei fonts/type1/urw/zapfding/uzdr.pfb gefunden (beim Kompilieren wird die Meldung „Glyphe für 279C ist in uzdr.pfb (Steckplatz 168) vorhanden“ ausgegeben), aber das Erstellen der PDF schlägt mit einem Fehler fehl. Die vollständige Ausgabe lautet wie folgt:
This is XeTeX, Version 3.14159265-2.6-0.99999 (TeX Live 2018) (preloaded format=xelatex)
restricted \write18 enabled.
entering extended mode
(./find_glyph_pfb_uzdr.tex
LaTeX2e <2017-04-15>
Babel <3.17> and hyphenation patterns for 3 language(s) loaded.
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo))
(/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
(/usr/share/texlive/texmf-dist/tex/generic/babel/switch.def)
(/usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf
(/usr/share/texlive/texmf-dist/tex/generic/babel/babel.def
(/usr/share/texlive/texmf-dist/tex/generic/babel/switch.def)
(/usr/share/texlive/texmf-dist/tex/generic/babel/xebabel.def
(/usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def)))))
(/usr/share/texlive/texmf-dist/tex/latex/fontspec/fontspec.sty
(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/expl3.sty
(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/expl3-code.tex)
(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def))
(/usr/share/texlive/texmf-dist/tex/latex/l3packages/xparse/xparse.sty)
(/usr/share/texlive/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty
(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty
(/usr/share/texlive/texmf-dist/tex/latex/base/tuenc.def))
(/usr/share/texlive/texmf-dist/tex/latex/fontspec/fontspec.cfg)))
(/usr/share/texlive/texmf-dist/tex/latex/multido/multido.sty
(/usr/share/texlive/texmf-dist/tex/generic/multido/multido.tex
v1.42, 2010/05/14 <tvz>))
No file find_glyph_pfb_uzdr.aux.
Glyph for 279C exists in uzdr.pfb (slot 168) [1] (./find_glyph_pfb_uzdr.aux)
xdvipdfmx:fatal: pdf_ref_obj(): passed invalid object.
Output file removed.
)
Error 256 (driver return code) generating output;
file find_glyph_pfb_uzdr.pdf may not be valid.
Transcript written on find_glyph_pfb_uzdr.log.
Das vollständige Protokoll finden Sie hier:find_glyph_pfb_uzdr.log.
Die Frage ist also: Was muss ich tun, um dieses Glyph zu drucken?
Upd: das fehlerhafte TeX-Dokument:
\documentclass{article}
\usepackage[english]{babel}
\usepackage{fontspec}
\usepackage{multido}
\font\testedfont="[/usr/share/texlive/texmf-dist/fonts/type1/urw/zapfding/uzdr.pfb]"
\font\basictextfont="cmr10"
\title{Find glyph for Unicode 279C in uzdr.pfb}
\begin{document}
\newcounter{glyphslotnum}
\newcommand\findglyphslotnum{}
\newcounter{totalglyphnum}
\newcommand\findtotalglyphnum{}
Test glyphs
{\basictextfont{Font filename: uzdr.pfb}}
\testedfont
\renewcommand\findglyphslotnum{\the\XeTeXcharglyph"279C}
\setcounter{glyphslotnum}{\findglyphslotnum}
\renewcommand\findtotalglyphnum{\the\XeTeXcountglyphs\testedfont}
\setcounter{totalglyphnum}{\findtotalglyphnum}
%\multido{\i=0+1}{\value{totalglyphnum}\relax}{
%{\basictextfont\i:\,}{\testedfont\XeTeXglyph\i}
%}
\basictextfont
uzdr.pfb: total \number\value{totalglyphnum} glyphs
\ifnum\value{glyphslotnum}>0{\message{Glyph for 279C exists in uzdr.pfb (slot \number\value{glyphslotnum})}Glyph for Unicode 279C exists in uzdr.pfb at slot \number\value{glyphslotnum}.
It looks like [{\testedfont\XeTeXglyph\value{glyphslotnum}}] (by $\backslash$XeTeXglyph)
or [{\testedfont{\char"279C}}] (by $\backslash$char)
or [{\testedfont{\symbol{"279C}}}] (by $\backslash$symbol)
}\fi
\end{document}