更改语言会使字体粗细(半粗体)消失

更改语言会使字体粗细(半粗体)消失

这是一个最小的工作示例:

\documentclass{article}
\usepackage{polyglossia,fontspec}
\setdefaultlanguage{english}
\setotherlanguage{latin}
\setmainfont{Source Sans Pro}
\newfontfamily\Smbd{Source Sans Pro Semibold}

\begin{document}

1. normal weight  \textit{italic} \textlatin{foreign} blah

2. \textbf{bold   \textit{italic} \textlatin{foreign} blah}

3. {\Smbd{semibold \textit{italic} \textlatin{foreign} blah}}

\end{document}

截屏

在第 3 行,“foreign”一词未使用半粗体字体排版。我应该在代码中做哪些更改才能实现这一点?

笔记:我想在文档中同时使用粗体字体和半粗体字体。

答案1

几年后的一次搜索中出现了这个问题,这是一个很好的问题,因此值得回答。

polyglossia包允许您为每种语言和脚本定义字体,例如\latinfont\germanfont。如果您没有为每种语言声明一个字体,polyglossia不是假设您当前选择的任何字体都可以支持每种语言,因此它将恢复默认字体系列。

您的选择包括:

快速解决

在您的语言块内设置您的字体系列。

\begin{latin}
\sourcesanspro
Exempli gratia.
\end{latin}

你可能会发现定义类似的东西很方便

\newcommand{\latinsf}[1]{\textlatin{\textsf{#1}}}

我下面使用这个。

添加半粗体粗细fontspec

这是一个更复杂的解决方案,但它为您提供了 NFSS 样式\sbseries\textsf{}可与多种字体配合使用的命令。在此示例中,我将设置 Latin Modern Roman 作为主要字体,然后设置\sourcesanspro字体系列,并将其设置为无衬线字体。

\documentclass[varwidth, preview]{standalone}
\usepackage{fontspec}
\usepackage{polyglossia}

\setmainfont[
  Scale = 1.0,
  Ligatures ={ Common, Discretionary, TeX},
  FontFace={sb}{n}{Font = {lmromandemi10-regular}, Extension = .otf },
  FontFace={sb}{it}{Font = {lmromandemi10-oblique}, Extension = .otf }
]{Latin Modern Roman}

\defaultfontfeatures{Scale=MatchLowercase, Ligatures=TeX}

\newfontfamily{\sourcesanspro}[
  Extension = .otf ,
  Ligatures = {Common, TeX},
  UprightFont = *-Regular ,
  BoldFont = *-Bold ,
  ItalicFont = *-RegularIt ,
  BoldItalicFont = *-BoldIt ,
  FontFace = {sb}{n}{*-Semibold},
  FontFace = {sb}{it}{*-SemiboldIt}
]{SourceSansPro}

\renewcommand{\sffamily}{\sourcesanspro}

% The commands to select semibold weight:
\DeclareRobustCommand{\sbseries}{\fontseries{sb}\selectfont}
\DeclareTextFontCommand{\textsb}{\sbseries}

\setdefaultlanguage{english}
\setotherlanguage{latin}

\newcommand{\latinsf}[1]{\textlatin{\textsf{#1}}}

\begin{document}
\sffamily
1. normal weight  \textit{italic} \latinsf{foreign} blah

2. \textbf{bold   \textit{italic} \latinsf{foreign} blah}

3. \textsb{semibold \textit{italic} \latinsf{foreign} blah}

4. \textrm{\textsb{Roman Demibold \textit{oblique} \textlatin{foreign} blah}}

\end{document}

在此处输入图片描述

使用sourcesanspro

不幸的是,截至 2018 年 8 月,这似乎已损坏。如果它得到修复,它将是您最简单的选择。该软件包包含一个\sourcesansprolight字体系列,其常规粗细为 Source Sans Pro Light,其粗细为 Source Sans Pro Semibold。

\documentclass[varwidth, preview]{standalone}
\usepackage[default, osf, opentype]{sourcesanspro}
\usepackage{polyglossia}

\setdefaultlanguage{english}
\setotherlanguage{latin}

\begin{document}

1. normal weight  \textit{italic} \textlatin{foreign} blah

2. \textbf{bold   \textit{italic} \textlatin{foreign} blah}

3. {\sourcesansprolight\textbf{semibold \textit{italic} \textlatin{\sourcesansprolight foreign} blah}}

\end{document}

答案2

我找到了一个解决方案:我可以更改主字体,而不是定义新的字体系列:

\newcommand\Smbd[1]{\setmainfont{Source Sans Pro Semibold}#1\setmainfont{Source Sans Pro}}

这是一个相当丑陋的伎俩,但它确实能起到作用。

相关内容