
У меня есть несколько .ttf
шрифтов, ~/Library/Fonts
которые я хотел бы использовать с XeLaTeX, но он, похоже, не может их найти. Например, это скомпилирует:
\documentclass[]{article}
\usepackage{fontspec}
\setmainfont{Times New Roman}
\begin{document}
The quick brown fox jumps over the lazy dog.
\end{document}
Но этого не будет:
\documentclass[]{article}
\usepackage{fontspec}
\setmainfont{Times New Roman.ttf}
\begin{document}
The quick brown fox jumps over the lazy dog.
\end{document}
И да, Times New Roman.ttf
находится в ~/Library/Fonts
.
решение1
Похоже, у вас неправильное понимание поиска шрифтов xetex
. Различные механизмы поиска подробно описаны вРуководство XeTeX, но я попытаюсь немного свести все к минимуму, чтобы дать ответ.
Если вы укажете имя шрифта, например Times New Roman, как в первом примере, где вы вызываете
\setmainfont{Times New Roman}
затем XeTeX будет использовать системную утилиту шрифтов для поиска шрифта. В GNU/Linux это обычно fontconfig
. XeTeX спросит fontconfig
«Где находится шрифт с именем «Times New Roman»?» и fontconfig
ответит что-то вроде «Он находится в .fonts/Times New Roman/Times New Roman.ttf
». Затем XeTeX перейдет к вызову, xdvipdfm
который загрузит шрифт из этого файла.
Если вместо имени шрифта указать имя файла, например Times New Roman.ttf
, как в
\setmainfont{Times New Roman.ttf}
то XeTeX немедленно передаст команду xdvipdfm
утилите включить шрифт из этого файла, т.е. либо из Times New Roman.ttf
текущего каталога, либо kpathsea
из texmf
дерева.
Рекомендуется устанавливать шрифты как системные шрифты, чтобы у вас не было нескольких копий шрифта, плавающих по вашим каталогам. Если это невозможно по какой-либо причине, то вам следует поместить файлы шрифтов вместе с вашим документом в тот же каталог или, может быть, если вы используете много шрифтов, в подпапку, предназначенную исключительно для шрифтов. Затем вы можете загрузить шрифты по их относительным путям, как в
\setmainfont{fonts/Times New Roman.ttf}
Примечание: Мне не нравятся пробелы в именах файлов, поскольку некоторые программы могут выйти из строя, если их не экранировать должным образом.