当我使用具有“非标准”字体粗细(此处为半粗体)的小斜体大写字母时,遇到了问题。
我尝试了几种方法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 的输出后,我认为同时使用粗体和半粗体是行不通的,因为粗细不够明显:只有当它们彼此相邻时才能发现一些差异。您应该选择其中一种作为粗体字体,而不要同时依赖两者。