Fontspec - 斜体小写字母,半粗体

Fontspec - 斜体小写字母,半粗体

当我使用具有“非标准”字体粗细(此处为半粗体)的小斜体大写字母时,遇到了问题。

我尝试了几种方法FontFace={sb}{it}{Font=LinLibertine_RZI_G. ttf, SmallCapsFont={LinLibertine_RZI_G. ttf}, SmallCapsFeatures={RawFeature={+smcp}}}},但不起作用。我不知道如何要求Fontspec使用小半粗斜体大写字母。

你有什么建议吗?

\documentclass{article}

\usepackage{fontspec}

\setmainfont{Linux Libertine G}[
    FontFace = {sb}{n}{LinLibertine_RZ_G.ttf} ,
    FontFace = {sb}{it}{LinLibertine_RZI_G.ttf},
]

\DeclareOldFontCommand{\sbseries}{\fontseries{sb}\selectfont}{\mathbf}
\DeclareTextFontCommand{\textsb}{\sbseries}

\begin{document}

Hello world. \textsb{Hello world.} \textbf{Hello world.}

\textit{Hello world.} \textit{\textsb{Hello world.}} \textit{\textbf{Hello world.}}

\textsc{Hello world.} \textsb{\textsc{Hello world.}} \textbf{\textsc{Hello world.}}

\textit{\textsc{Hello world.}} \textit{\textsb{\textsc{Hello world.}}} \textit{\textbf{\textsc{Hello world.}}}

\end{document}

在此处输入图片描述

编辑

在 Egreg 回答之后,这是我的新 MWE,但问题仍然存在:

\documentclass{article}

\usepackage{fontspec}

\setmainfont{Linux Libertine G}[
    BoldFont=LinLibertine_RB_G.ttf,
    BoldItalicFont=LinLibertine_RBI_G.ttf,
    FontFace={sb}{n}{LinLibertine_RZ_G.ttf},
    FontFace={sb}{it}{LinLibertine_RZI_G.ttf},
]

\DeclareRobustCommand{\sbseries}{\fontseries{sb}\selectfont}
\DeclareTextFontCommand{\textsb}{\sbseries}

\begin{document}
\textit{\textsc{Hello world.}} \textit{\textsb{\textsc{Hello world.}}} \textit{\textbf{\textsc{Hello world.}}}
\end{document}

答案1

为什么不能使用诸如\rm\it或之类的旧字体命令\bf?因为它们遵循原始的 LaTeX 设置并重置全部字体功能。因此,如果您这样做,\it\bf您只会得到粗体,而不是斜体。

该命令\DeclareOldFontCommand仅用于兼容旧文档。如果您查看 LaTeX 内核,您会看到它\bfseries是用 定义的\DeclareRobustCommand

如果定义了半粗体,您还必须声明计划使用的粗体字体。

\documentclass{article}

\usepackage{fontspec}

\setmainfont{Linux Libertine O}[
  BoldFont=* Bold,
  BoldItalicFont=* Bold Italic,
  FontFace = {sb}{n}{* Semibold},
  FontFace = {sb}{it}{* Semibold Italic},
]

\DeclareRobustCommand{\sbseries}{\fontseries{sb}\selectfont}
\DeclareTextFontCommand{\textsb}{\sbseries}

\begin{document}

Hello world. \textsb{Hello world.} \textbf{Hello world.}

\textit{Hello world.} \textit{\textsb{Hello world.}} \textit{\textbf{Hello world.}}

\textsc{Hello world.} \textsb{\textsc{Hello world.}} \textbf{\textsc{Hello world.}}

\textit{\textsc{Hello world.}}
\textit{\textsb{\textsc{Hello world.}}}
\textit{\textbf{\textsc{Hello world.}}}

\end{document}

字体已更改为适合我的机器。

在此处输入图片描述

如果我将所有句点替换为.\typeout{\fontname\font},终端会显示

"Linux Libertine O/OT:script=latn;language=dflt;mapping=tex-text;"
"Linux Libertine O Semibold/OT:script=latn;language=dflt;mapping=tex-text;"
"Linux Libertine O Bold/OT:script=latn;language=dflt;mapping=tex-text;"
"Linux Libertine O Italic/OT:script=latn;language=dflt;mapping=tex-text;"
"Linux Libertine O Semibold Italic/OT:script=latn;language=dflt;mapping=tex-text;"
"Linux Libertine O Bold Italic/OT:script=latn;language=dflt;mapping=tex-text;"
"Linux Libertine O/OT:script=latn;language=dflt;+smcp;mapping=tex-text;"
"Linux Libertine O Semibold/OT:script=latn;language=dflt;+smcp;mapping=tex-text;"
"Linux Libertine O Bold/OT:script=latn;language=dflt;+smcp;mapping=tex-text;"
"Linux Libertine O Italic/OT:script=latn;language=dflt;+smcp;mapping=tex-text;"
"Linux Libertine O Semibold Italic/OT:script=latn;language=dflt;+smcp;mapping=tex-text;"
"Linux Libertine O Bold Italic/OT:script=latn;language=dflt;+smcp;mapping=tex-text;"

这似乎就是您正在寻找的。

这是 Libertinus Serif 的设置。

\documentclass{article}

\usepackage{fontspec}

\setmainfont{LibertinusSerif}[
  Extension=.otf,
  UprightFont=*-Regular,
  ItalicFont=*-Italic,
  BoldFont=*-Bold,
  BoldItalicFont=*-BoldItalic,
  FontFace = {sb}{n}{*-Semibold},
  FontFace = {sb}{it}{*-SemiboldItalic},
]

\DeclareRobustCommand{\sbseries}{\fontseries{sb}\selectfont}
\DeclareTextFontCommand{\textsb}{\sbseries}

\begin{document}

Hello world\typeout{\fontname\font}.
\textsb{Hello world\typeout{\fontname\font}.}
\textbf{Hello world\typeout{\fontname\font}.}

\textit{Hello world\typeout{\fontname\font}.}
\textit{\textsb{Hello world\typeout{\fontname\font}.}}
\textit{\textbf{Hello world\typeout{\fontname\font}.}}

\textsc{Hello world\typeout{\fontname\font}.}
\textsb{\textsc{Hello world\typeout{\fontname\font}.}}
\textbf{\textsc{Hello world\typeout{\fontname\font}.}}

\textit{\textsc{Hello world\typeout{\fontname\font}.}}
\textit{\textsb{\textsc{Hello world\typeout{\fontname\font}.}}}
\textit{\textbf{\textsc{Hello world\typeout{\fontname\font}.}}}

\end{document}

在此处输入图片描述

为了检查正在使用的字体,我添加了\typeout{\fontname\font}并在终端上得到了

"[LibertinusSerif-Regular.otf]/OT:script=latn;language=dflt;mapping=tex-text;"
"[LibertinusSerif-Semibold.otf]/OT:script=latn;language=dflt;mapping=tex-text;"
"[LibertinusSerif-Bold.otf]/OT:script=latn;language=dflt;mapping=tex-text;"
"[LibertinusSerif-Italic.otf]/OT:script=latn;language=dflt;mapping=tex-text;"
"[LibertinusSerif-SemiboldItalic.otf]/OT:script=latn;language=dflt;mapping=tex-text;"
"[LibertinusSerif-BoldItalic.otf]/OT:script=latn;language=dflt;mapping=tex-text;"
"[LibertinusSerif-Regular.otf]/OT:script=latn;language=dflt;+smcp;mapping=tex-text;"
"[LibertinusSerif-Semibold.otf]/OT:script=latn;language=dflt;+smcp;mapping=tex-text;"
"[LibertinusSerif-Bold.otf]/OT:script=latn;language=dflt;+smcp;mapping=tex-text;"
"[LibertinusSerif-Italic.otf]/OT:script=latn;language=dflt;+smcp;mapping=tex-text;"
"[LibertinusSerif-SemiboldItalic.otf]/OT:script=latn;language=dflt;+smcp;mapping=tex-text;"
"[LibertinusSerif-BoldItalic.otf]/OT:script=latn;language=dflt;+smcp;mapping=tex-text;"

在查看 Linux Libertine 和 Libertinus serif 的输出后,我认为同时使用粗体和半粗体是行不通的,因为粗细不够明显:只有当它们彼此相邻时才能发现一些差异。您应该选择其中一种作为粗体字体,而不要同时依赖两者。

相关内容