我如何获取当前字体,特别是当使用 设置时\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}