获取当前字体

获取当前字体

我如何获取当前字体,特别是当使用 设置时\setmainfont{Times New Roman}?我尝试了\l_fontspec_font\f@family和,\l_fontspec_family_tl但它们都没有包含字体的确切名称,因此:

\setmainfont{\f@family}

是无操作的。(值得注意的是,它删除了字体名称中的空格,这对于 lualatex 来说似乎没问题,但对于 xelatex 来说则不然)。

知道如何获取当前字体,并且最好保存其名称以便稍后重置吗?

梅威瑟:

% compile with xelatex
\documentclass[]{article}

\usepackage{fontspec}
\setmainfont{Times New Roman}
\makeatletter
\show\f@family
% this works with lualatex but not with xelatex:
\setmainfont{\f@family}
\makeatother

\begin{document}
Hey
\end{document}

编辑

解释为什么我想要恢复名称可能会更简单Times New Roman:简而言之,我想要获取文件 A 中的字体并在文件 B 中重用它。更准确地说,现在使用我的 robust-externalize 库的人需要手动加载缓存文件中的字体,例如:

\robExtConfigure{
    add to preset={latex}{
        add to preamble={\setmainfont{Libertinus Serif}},
    },
}

如果字体不变,这没什么问题,但如果文档中的字体经常变化,那么要纠正这个问题可能会很麻烦,因为用户需要手动更新字体。目前,我建议xelatex 用户创建一个新的\mysetmainfont,例如:

% Create a new command \mysetmainfont which forwards the font to the picture.
\NewDocumentCommand{\mysetmainfont}{m}{%
  \def\myCurrentFont{#1}% Stores the name of the current font in \myCurrentFont
  \setmainfont{#1}%
}

% Use mysetmainfont from now to change font:
\mysetmainfont{Times New Roman}

\usepackage{robust-externalize}
\robExtConfigure{
  add to preset={latex}{
    use xelatex,
    set placeholder eval={__MY_FONT__}{\myCurrentFont},
    add to preamble={
      \usepackage{fontspec}
      \setmainfont{__MY_FONT__}
    },
  },
}

但我觉得一定有更好的解决方案来获取文件 A 中的字体名称并在文件 B 中重复使用它。有更好的解决方案吗?

答案1

据我所知,您正在寻找一个用于 latex 字体选择的名称,而不是 opentype 字体名称。fontspec将分配一个字体系列,但如果您要使用它,分配一个容易记住的字体系列会更容易,因此类似于

\documentclass[]{article}

\usepackage{fontspec}
\setmainfont[NFSSFamily=tmsnr]{Times New Roman}
\makeatletter
\show\f@family
% this does nothing here as the family is already selected, but may be used in other contexts,
\fontfamily{tmsnr}\selectfont
\makeatother

\begin{document}
Hey
\end{document}

相关内容