字体因用于图形标题而“损坏”(与放荡者互动?)

字体因用于图形标题而“损坏”(与放荡者互动?)

我遇到了一个奇怪的问题,最初是由于使用而引起的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中使用,您可以加载并添加缺少的字体替换。\bfdefaultbbxt1cmss.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}

在此处输入图片描述

相关内容