是否可以让 setmainfont 读取环境变量以在一个地方指定字体路径

是否可以让 setmainfont 读取环境变量以在一个地方指定字体路径

我在 latex 中使用此命令来指定字体路径:

\setmainfont[Color=primary, Path = fonts/source-han-serif/,BoldItalicFont=SourceHanSerifSC-Bold,BoldFont=SourceHanSerifSC-Bold,ItalicFont=SourceHanSerifSC-Bold]{SourceHanSerifSC-Regular}

现在我有一个问题,我有许多包含字体路径的 cls 文件,如果我想更改文件路径,我必须打开每个 cls 文件并逐个编辑。是否可以让 setmainfont 读取环境,以便我可以在一个地方指定字体路径?我可能的操作系统是 Ubuntu 和 macOS。

答案1

是的,你可以使用我的代码https://tex.stackexchange.com/a/62032/4427

这里我使用了之前回答您关于的问题的一个答案的变体HOME,仅作为例子。

\documentclass{article}
\usepackage{fontspec}

\ExplSyntaxOn
\NewDocumentCommand{\getenv}{om}
 {
  \sys_get_shell:nnN { kpsewhich ~ --var-value ~ #2 } { } \l_tmpa_tl
  \tl_trim_spaces:N \l_tmpa_tl
  \IfNoValueTF { #1 }
   {
    \tl_use:N \l_tmpa_tl
   }
   {
    \tl_set_eq:NN #1 \l_tmpa_tl
   }
 }
\ExplSyntaxOff

\getenv[\HOME]{HOME}

\getenv[\TEST]{TEST}

\newfontface{\fell}{IMFePIit29C}[
  Path=\HOME/provaccia/conf-1.7b/fell/,
  Extension=.otf,
]

\begin{document}

\texttt{TEST is \TEST}

\texttt{TEST is \getenv{TEST}}

{\fell Hello}

\end{document}

我运行bash

TEST=foo xelatex dolphin

输出为

在此处输入图片描述

当然,您有责任在每个系统上正确定义和导出所需的环境变量。

相关内容