Situation

Situation

fontspecDies 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:

  1. Integrierte Schriftarten in TeX Live (vermutlich dieselben wie in MikTeX)
  2. Schriftartdateien im Repository

KEINE Systemschriftartenfc-list -f "%{family}\n" | sort -uwie auf Unix-basierten Maschinen aufgelistet .

Laden von Schriftarten mitfontspec

InSchriftspezifikation, Schriftarten werden auf verschiedene Arten geladen:

  1. 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
  1. 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. fontspecEs 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.

Welche Schriftpakete sind in TeX Live installiert?

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 OPENTYPEFONTSund TTFFONTSist eine Aufgabe, die von der kpseBibliothek ausgeführt wird, mit xetexder verknüpft ist. Der Benutzer muss alsonichtmüssen Sie sie festlegen: Sie werden automatisch festgelegt, sobald xetexgestartet 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 ( sudooder ä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 \testpathFamilie nur zur Gegenprüfung definiert wird, ob sie \testkpseausreicht.

\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.

Bildbeschreibung hier eingeben

Antwort2

Verwenden

 \setmonofont{Inconsolatazi4}

oder

 \setmonofont[
   BoldFont=Inconsolatazi4-Bold.otf]{Inconsolatazi4-Regular.otf}

Standardmäßig durchsucht , das zum Suchen von Schriftdateien fontconfigverwendet 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/xelatexxetex/xelatexkpsewhichfontconfig

verwandte Informationen