
fontspec
Dies ist eine XeLaTeX-Frage. Es scheint wirklich albern, diese Frage zu stellen, nachdem ich schon so viele Jahre XeLaTeX verwende . Ich glaube, ich habe immer eine Lösung gefunden. Dieses Mal hätte ich gerne eine definitive Antwort.
Situation
Im Hintergrund läuft ein Server (Compiler/Build-System), der rund um die Uhr Dokumente (unter anderem) aus Versionskontroll-Repositories generiert. Dokumente werden auf mehreren Clients von Menschen bearbeitet. Es kann nicht davon ausgegangen werden, dass die Systemschriftarten auf allen Rechnern gleich sind.Es gibt zwei Dinge, die auf allen Maschinen gleich sind (oder zumindest sein sollten): 1. die TeX Live-Version/MikTeX. 2. Die Repository-Dateien.Dies bedeutet, dass alle von mir geladenen Schriftarten in einem der folgenden Formate vorliegen sollten:
- Integrierte Schriftarten in TeX Live (vermutlich dieselben wie in MikTeX)
- Schriftartdateien im Repository
KEINE Systemschriftartenfc-list -f "%{family}\n" | sort -u
wie auf Unix-basierten Maschinen aufgelistet .
Laden von Schriftarten mitfontspec
InSchriftspezifikation, Schriftarten werden auf verschiedene Arten geladen:
- Dateiname mit Erweiterung
z.B
\setmainfont{texgyrepagella-regular.otf}
\let\texgyrepagellaregular\normalfont % create semantically relevant macro (name+font) to be consistent with other \newfontfamily macros
- Dateiname ohne Erweiterung, aber mit als Parameter angegebenen Pfadkonstruktionsausdrücken:
z.B
\setmainfont{texgyrepagella}[
Path = /Users/will/Fonts/ ,
UprightFont = *-regular ,
BoldFont = *-bold ,]
Ich möchte das Laden von Schriftarten durch Eintippen von /usr/local/texlive/<YEAR>/
[...] vermeiden, da sie sich möglicherweise nicht am selben Speicherort befinden.
Versuchen
\documentclass{article}
\usepackage{fontspec}
\setmonofont{Inconsolata}
\newcommand\escapedlog[1]{\par\ttfamily #1\par}
\begin{document}
Keep it simple.
\escapedlog{Hello}
\end{document}
Protokollausgabe (Fehler)
Ich glaube, ich weiß, was hier passiert. fontspec
Es wird nur die Liste der Systemschriftarten überprüft fc-list -f "%{family}\n" | sort -u
.
kpathsea: Running mktextfm inconsolata
mktextfm: Running mf-nowin -progname=mf \mode:=ljfour; mag:=1; nonstopmode; input inconsolata
This is METAFONT, Version 2.7182818 (TeX Live 2015) (preloaded base=mf)
kpathsea: Running mktexmf inconsolata
! I can't find file `inconsolata'.
<*> ...our; mag:=1; nonstopmode; input inconsolata
Please type another input file name
! Emergency stop.
<*> ...our; mag:=1; nonstopmode; input inconsolata
Transcript written on mfput.log.
grep: inconsolata.log: No such file or directory
mktextfm: `mf-nowin -progname=mf \mode:=ljfour; mag:=1; nonstopmode; input inconsolata' failed to make inconsolata.tfm.
kpathsea: Appending font creation commands to missfont.log.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! fontspec error: "font-not-found"
!
! The font "inconsolata" cannot be found.
!
! See the fontspec documentation for further information.
!
! For immediate help type H <return>.
!...............................................
l.3 \setmonofont{inconsolata}
?
Traditionelle Pakete
Laut dieser Liste sollte ich diese Schriftart installiert haben.
Antwort1
Sie müssen keinen expliziten Pfad angeben, solange sich die Schriftart in einem von XeTeX durchsuchten Verzeichnis befindet. Die relevanten (Pseudo-)Umgebungsvariablen sind
% TrueType outline fonts.
TTFONTS = .;$TEXMF/fonts/{truetype,opentype}//;$OSFONTDIR//
% OpenType outline fonts.
OPENTYPEFONTS = .;$TEXMF/fonts/{opentype,truetype}//;$OSFONTDIR//
Ein Benutzer kann in der Umgebung die Variable festlegen OSFONTDIR
, aber das Festlegen von OPENTYPEFONTS
und TTFFONTS
ist eine Aufgabe, die von der kpse
Bibliothek ausgeführt wird, mit xetex
der verknüpft ist. Der Benutzer muss alsonichtmüssen Sie sie festlegen: Sie werden automatisch festgelegt, sobald xetex
gestartet wird.
Abhängig vom Betriebssystem können Sie das System auf die Schriftarten der aktuellen TeX-Distribution aufmerksam machen. Wie in der Installationsanleitung von TeX Live beschrieben, können Sie auf den meisten GNU/Linux-Systemen Folgendes ausführen:
cp $(kpsewhich -var-value TEXMFSYSVAR)/fonts/conf/texlive-fontconfig.conf /etc/fonts/conf.d/09-texlive.conf
fc-cache -fsv
mit Superuser-Befugnissen ( sudo
oder ähnlichem) und die TeX Live OpenType- und TrueType-Schriftarten stehen dem Betriebssystem zur Verfügung.
Der erste Befehl sollte nach der jährlichen TeX Live-Veröffentlichung geladen werden, der zweite sollte ausgeführt werden, wenn Updates oder neue Schriftarten mit installiert werden tlmgr
. Ich mache das auf meinen GNU/Linux-Boxen.
Hier ist ein Beispiel, bei dem die \testpath
Familie nur zur Gegenprüfung definiert wird, ob sie \testkpse
ausreicht.
\documentclass{article}
\usepackage{fontspec}
\newfontfamily{\testkpse}{Inconsolatazi4}[
Extension=.otf,
UprightFont=*-Regular,
BoldFont=*-Bold,
]
\newfontfamily{\testpath}{Inconsolatazi4}[
Extension=.otf,
Path=/usr/local/texlive/2016/texmf-dist/fonts/opentype/public/inconsolata/,
UprightFont=*-Regular,
BoldFont=*-Bold,
]
\newfontfamily{\testfc}{Inconsolatazi4}
\begin{document}
\pagestyle{empty}
{\testkpse Inconsolata \bfseries Bold}
{\testpath Inconsolata \bfseries Bold}
{\testfc Inconsolata \bfseries Bold}
\end{document}
Ausführen dieses Beispiels mit
xelatex -output-driver="xdvipdfmx -vv" test
zeigt die folgenden Informationen auf dem Terminal an
<FONTMAP:/usr/local/texlive/2016/texmf-var/fonts/map/pdftex/updmap/pdftex.map><FONTMAP:/usr/local/texlive/2016/texmf-var/fonts/map/dvipdfmx/updmap/kanjix.map><FONTMAP:/usr/local/texlive/2016/texmf-dist/fonts/map/dvipdfmx/ckx.map>No dvi filename specified, reading standard input.
stdin -> incons.pdf
DVI Comment: XeTeX output 2016.06.09:1437
<AGL:texglyphlist.txt><AGL:pdfglyphlist.txt><AGL:glyphlist.txt>[1</usr/local/texlive/2016/texmf-dist/fonts/opentype/public/inconsolata/[email protected]<NATIVE-FONTMAP:/usr/local/texlive/2016/texmf-dist/fonts/opentype/public/inconsolata/Inconsolatazi4-Regular.otf/0/H/65536/0/0>
pdf_font>> Input encoding "Identity-H" requires at least 2 bytes.
pdf_font>> The -m <00> option will be assumed for "/usr/local/texlive/2016/texmf-dist/fonts/opentype/public/inconsolata/Inconsolatazi4-Regular.otf".
(CID:Inconsolatazi4-Regular)
pdf_font>> Type0 font "/usr/local/texlive/2016/texmf-dist/fonts/opentype/public/inconsolata/Inconsolatazi4-Regular.otf" cmap_id=<Identity-H,0> opened at font_id=</usr/local/texlive/2016/texmf-dist/fonts/opentype/public/inconsolata/Inconsolatazi4-Regular.otf/0/H/65536/0/0,0>.
></usr/local/texlive/2016/texmf-dist/fonts/opentype/public/inconsolata/[email protected]<NATIVE-FONTMAP:/usr/local/texlive/2016/texmf-dist/fonts/opentype/public/inconsolata/Inconsolatazi4-Bold.otf/0/H/65536/0/0>
pdf_font>> Input encoding "Identity-H" requires at least 2 bytes.
pdf_font>> The -m <00> option will be assumed for "/usr/local/texlive/2016/texmf-dist/fonts/opentype/public/inconsolata/Inconsolatazi4-Bold.otf".
(CID:Inconsolatazi4-Bold)
pdf_font>> Type0 font "/usr/local/texlive/2016/texmf-dist/fonts/opentype/public/inconsolata/Inconsolatazi4-Bold.otf" cmap_id=<Identity-H,0> opened at font_id=</usr/local/texlive/2016/texmf-dist/fonts/opentype/public/inconsolata/Inconsolatazi4-Bold.otf/0/H/65536/0/0,1>.
></usr/local/texlive/2016/texmf-dist/fonts/opentype/public/inconsolata/[email protected]></usr/local/texlive/2016/texmf-dist/fonts/opentype/public/inconsolata/[email protected]></usr/local/texlive/2016/texmf-dist/fonts/opentype/public/inconsolata/[email protected]></usr/local/texlive/2016/texmf-dist/fonts/opentype/public/inconsolata/[email protected]>]
otf_cmap>> Creating ToUnicode CMap for "/usr/local/texlive/2016/texmf-dist/fonts/opentype/public/inconsolata/Inconsolatazi4-Regular.otf"...
otf_cmap>> Creating ToUnicode CMap for "/usr/local/texlive/2016/texmf-dist/fonts/opentype/public/inconsolata/Inconsolatazi4-Bold.otf"...
(CID:/usr/local/texlive/2016/texmf-dist/fonts/opentype/public/inconsolata/Inconsolatazi4-Regular.otf[CIDFontType0])(CID:/usr/local/texlive/2016/texmf-dist/fonts/opentype/public/inconsolata/Inconsolatazi4-Bold.otf[CIDFontType0])
dass angezeigt wird, dass jeweils die richtige Schriftart ausgewählt wurde.
Antwort2
Verwenden
\setmonofont{Inconsolatazi4}
oder
\setmonofont[
BoldFont=Inconsolatazi4-Bold.otf]{Inconsolatazi4-Regular.otf}
Standardmäßig durchsucht , das zum Suchen von Schriftdateien fontconfig
verwendet wird, nicht die TeX-Schriftverzeichnisse. Verwenden Sie jedoch , weshalb es Schriften mit dem vollständigen Namen findet. Man kann diese Dateien in das Schriftverzeichnis des Systems legen oder den Suchpfad für erweitern. Dann kann man den symbolischen Namen verwenden.xetex/xelatex
xetex/xelatex
kpsewhich
fontconfig