是否可以使用 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),但保留了连字符。但它很接近。