如何检测 LuaLaTeX 当前使用的字体

如何检测 LuaLaTeX 当前使用的字体

我使用的是 LuaLaTeX 和 opentype 字体。这些字体都不是 TeX 字体;它们要么是商业许可的,要么是定制的。没问题,到目前为止一切都运行良好。

是否有可能检测出在文本字符串的特定位置使用了哪种字体?(编辑答案:是的。见下文)。我看到了这一点:

我如何测试当前的字体?

但它似乎在 TeX 字体之外不起作用。(编辑实际上,是的。)

我想知道的原因如下:我有一个自定义字形,它有多种变体,采用自定义字体。大小和粗细的变化与周围的字体(Garamond、Utopia、Palatino、SourceSans 等)相协调。如果用户更改周围的字体,我希望自定义字形能够自动更改,使用一个命令来检测周围的字体并选择正确的字形变体。

请注意,文本字符串中本地使用的字体可能与文档默认字体不同。

如果这是一个非常严重的编码问题,那么我更容易忽略它,并手动更改字形。但如果很简单,你能给我指明正确的方向吗?

第二次编辑:MWE,现在已更改以显示其工作原理。谢谢,egreg。我之前没有注意到有关 \expandafter\string 的部分。

% !TeX program = LuaLaTeX
% !TEX encoding = UTF-8
\documentclass[12pt]{article}
\usepackage{fontspec}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\newfontfamily{\fGaramond}{Adobe Garamond Pro}[ ]
\newcommand\fontGaramond[1]{{\fGaramond #1}}
\newfontfamily{\fMyriad}{Myriad Pro}[ ]
\newcommand\fontMyriad[1]{{\fMyriad #1}}
\setmainfont{Adobe Garamond Pro}
\begin{document}
This text is in the main font, Garamond.
Code: {\expandafter\string\the\font} is here. \fontMyriad{But this is in Myriad.
Code: {\expandafter\string\the\font} is here.}
Back to Garamond.\par
\end{document}

结果

答案1

该指令\the\font不产生任何“可见”内容,但产生内部 NFSS 格式的选择当前字体的控制序列。

您可以通过 生成此控制序列的字符串表示\expandafter\string\the\font。我将字体更改为一些我拥有的字体。

\documentclass[12pt]{article}
\usepackage{fontspec}
\usepackage{polyglossia}

\setdefaultlanguage{english}

\setmainfont{EB Garamond}
\newfontfamily{\fMyriad}{TeX Gyre Adventor}
\DeclareTextFontCommand{\fontMyriad}{\fMyriad}

\begin{document}
This text is in the main font, Garamond.
Code: {\expandafter\string\the\font} is here. \fontMyriad{But this is in Myriad.
Code: {\expandafter\string\the\font} is here.}
Back to Garamond.\par
\end{document}

请注意,您不需要\fGaramond,因为\normalfont\textnormal相当于和\fontGaramond

如果添加以下选项,您可以获得更可预测的姓氏NFSSFamily

\documentclass[12pt]{article}
\usepackage{fontspec}
\usepackage{polyglossia}

\setdefaultlanguage{english}

\setmainfont{EB Garamond}[
  NFSSFamily=Garamond
]
\newfontfamily{\fMyriad}{TeX Gyre Adventor}[
  NFSSFamily=Myriad
]
\DeclareTextFontCommand{\fontMyriad}{\fMyriad}

\begin{document}
This text is in the main font, Garamond.
Code: {\expandafter\string\the\font} is here. \fontMyriad{But this is in Myriad.
Code: {\expandafter\string\the\font} is here.}
Back to Garamond.\par
\end{document}

在此处输入图片描述

请注意,您可以随时检查

\f@encoding \f@family \f@series \f@shape

就像建议的那样Mike Renfro 的回答以便做出决策宏;例如,在\normalfont并假设第二个例子下,\f@family将扩展为Garamond

相关内容