我遇到了一个奇怪的问题,最初是由于使用而引起的acmart
,但我已经能够用进行最小限度的复制article
。
这是我的 LaTeX 源代码:
\documentclass{article}
\RequirePackage{libertine}
\RequirePackage{caption}
\captionsetup{textfont={bf}}
\begin{document}
{\fontfamily{cmss}\fontseries{b}\selectfont hello}
{\fontfamily{cmss}\fontseries{b}\selectfont hello}
\begin{figure}[h]
\caption{
{\fontfamily{cmss}\fontseries{b}\selectfont hello}
{\fontfamily{cmss}\fontseries{b}\selectfont hello}
}
\end{figure}
{\fontfamily{cmss}\fontseries{b}\selectfont hello}
{\fontfamily{cmss}\fontseries{b}\selectfont hello}
\end{document}
输出如下所示:
如您所见,标题中和标题后面的文本(???)是 cmss,但它失去了粗体。不知何故,在标题中使用 cmss-b 会破坏将来使用 cmss-b 的习惯。这对我来说很奇怪!
我已经确认,需要完整的前言才能重现此问题。删除 libertine 的导入、caption 的导入或使用 captionsetup 可恢复我期望的行为。(当然,这三行出现在acmart
,我无法更改它们。)
有什么想法吗?提前致谢!
答案1
你得到
LaTeX Font Warning: Font shape `T1/cmss/b/n' undefined
(Font) using `T1/cmss/m/n' instead on input line 11.
一旦发生这种情况,每次您要求使用粗体无衬线字体时,您都会得到中等粗细。
当然应该不是在参数中使用字体更改命令\caption
,但正确定义样式。
如果您想要覆盖有关无衬线字体的类别决定,请重新定义\sfdefault
。
但是,无论如何,如果您打算在而不是 的上下文cmss
中使用,您可以加载并添加缺少的字体替换。\bfdefault
b
bx
t1cmss.fd
\makeatletter
\input{t1cmss.fd}
\DeclareFontShape{T1}{cmss}{b}{n}{<->ssub*cmss/bx/n}{}
\makeatother
您可以将其合并到您的示例中:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{libertine}
\usepackage{caption}
\captionsetup{textfont={bf}}
\makeatletter
\input{t1cmss.fd}
\DeclareFontShape{T1}{cmss}{b}{n}{<->ssub*cmss/bx/n}{}
\makeatother
\begin{document}
{\fontfamily{cmss}\fontseries{b}\selectfont hello}
{\fontfamily{cmss}\fontseries{b}\selectfont hello}
\begin{figure}[h]
\caption{
{\fontfamily{cmss}\fontseries{b}\selectfont hello}
{\fontfamily{cmss}\fontseries{b}\selectfont hello}
}
\end{figure}
{\fontfamily{cmss}\fontseries{b}\selectfont hello}
{\fontfamily{cmss}\fontseries{b}\selectfont hello}
\end{document}