XeLaTeX、fontspec 和打印当前字体的名称

XeLaTeX、fontspec 和打印当前字体的名称

是否可以使用 XeLaTeX 和fontspec.sty编写一个宏,例如\printcurrentfont,以便打印当前正在使用的字体的名称?我查看了文档fontspec,但到目前为止还没有找到答案。

答案1

\the\font您可以分别使用和访问当前字体的内部和外部名称\fontname\font。前者必须进行字符串化才能打印。

可以添加对外部字体名称的进一步修改。

\documentclass{article}

\usepackage{fontspec}

\setmainfont{Libertinus Serif}
\setsansfont{TeX Gyre Adventor}[Scale=MatchUppercase]
\newfontfamily{\junicode}{Junicode}

\DeclareTextFontCommand{\textttup}{\normalfont\ttfamily}

\newcommand{\printinternalcurrentfont}{%
  \expandafter\textttup\expandafter{\expandafter\string\the\font}%
}
\newcommand{\printexternalcurrentfont}{%
  \expandafter\textttup\expandafter{\fontname\font}%
}

\begin{document}

\printinternalcurrentfont

\printexternalcurrentfont

\bigskip

{\itshape\printinternalcurrentfont\par\printexternalcurrentfont}

\bigskip

\sffamily

\printinternalcurrentfont

\printexternalcurrentfont

\bigskip

\junicode

\printinternalcurrentfont

\printexternalcurrentfont

\end{document}

使用 XeLaTeX 输出

在此处输入图片描述

使用 LuaLaTeX 输出

在此处输入图片描述

如果您对细节不感兴趣,只对主要字体名称部分感兴趣,请将定义更改\printexternalcurrentfont

\makeatletter
\newcommand{\printexternalcurrentfont}{%
  \expandafter\format@externalcurrentfont\fontname\font:\@nil
}
\def\format@externalcurrentfont#1:#2\@nil{%
  \textttup{\@ifnextchar"{\@gobble}{}#1}%
}
\makeatother

输出将变成

在此处输入图片描述

答案2

事实证明可用的答案要简单得多:

\newcommand{\printexternalcurrentfont}{%
  \expandafter\getfontname\fontname\font:\@nil}
\def\getfontname"[#1.#2\@nil{#1}

您只需要解析除实际字体名称之外的所有内容。不幸的是,它没有为您提供用户友好的名称(例如 Raleway Regular),但保留了连字符。但它很接近。

相关内容