fontspec \setmainfont 覆盖其他字体系列

fontspec \setmainfont 覆盖其他字体系列

似乎fontspec's的使用\setmainfont会覆盖其他字体系列。这是预期的行为吗?

我应该用吗\renewcommand{\familydefault}{\sfdefault}

MWE 如下:

\documentclass{article}
\usepackage{fontspec}
\usepackage{lipsum}

\setromanfont{Times New Roman}
\setsansfont{Arial}
\setmonofont{Courier New}
\setmainfont{Arial}
%\renewcommand{\familydefault}{\sfdefault}

\begin{document}

\section{Introduction}

\lipsum[1]

\section{Font list}

\begin{itemize}
    \item Main font:  \expandafter\texttt\expandafter{\fontname\font}
    \item {\rmfamily Roman font: \expandafter\texttt\expandafter{\fontname\font}}
    \item {\sffamily Sans font: \expandafter\texttt\expandafter{\fontname\font}}
    \item {\ttfamily TT font: \expandafter\texttt\expandafter{\fontname\font}}
\end{itemize}

\end{document}

答案1

这是它设计的工作方式。\setmainfont本质上只是设置\rmfamily。因此,如果您明确设置了罗马字体,则根本不需要使用\setmainfont。因此,在您的示例中,您首先将设置\rmfamily为 Times New Roman,然后将\setmainfont其设置为 Arial。

因此,如果您想要使用 Times、Arial 和 Courier 作为字体,则可以使用:

\setromanfont{Times New Roman}
\setsansfont{Arial}
\setmonofont{Courier New}

或者

\setmainfont{Times New Roman}
\setsansfont{Arial}
\setmonofont{Courier New}

\setmainfont和之间实际上没有实际区别\setromanfont

相关内容