重新定义 \textbf 为始终无衬线

重新定义 \textbf 为始终无衬线

正如标题所说,有没有办法让粗体文本自动排版为无衬线字体?我在想

\renewcommand{\bfdefault}{???}

但我不知道该重新定义什么?

答案1

您是否尝试过插入

\renewcommand{\textbf}[1]{{\bfseries\sffamily#1}}

在你的文档的序言中?请注意双花括号;里面的一对花括号用于限制\bfseries\sffamily对参数的应用\textbf

附录:正如 cgnieder 和 egreg 的评论所暗示的,LaTeX 内核(参见文件latex.ltx,大约第 3720 行)提供了以下定义\textbf

\DeclareTextFontCommand{\textbf}{\bfseries}

如果在 TeX 处于数学模式时遇到宏,则宏\DeclareTextFontCommand会小心地保持整洁。\textbf为了保持同样整洁,最好重新定义\textbf如下:

\DeclareTextFontCommand{\textbf}{\bfseries\sffamily}

答案2

的定义\bfseries如下latex.ltx

\DeclareRobustCommand\bfseries
        {\not@math@alphabet\bfseries\mathbf
         \fontseries\bfdefault\selectfont}

所以可以说

\makeatletter
\DeclareRobustCommand\bfseries{%
  \not@math@alphabet\bfseries\mathbfsf
  \fontfamily\sfdefault\fontseries\bfdefault\selectfont
}
\DeclareMathAlphabet{\mathbfsf}{OT1}{\sfdefault}{\bfdefault}{n}
\makeatother

以下是完整的示例:

\documentclass{article}
\usepackage{lmodern} % for sans serif bold slanted

\makeatletter
\DeclareRobustCommand\bfseries{%
  \not@math@alphabet\bfseries\mathbfsf
  \fontfamily\sfdefault\fontseries\bfdefault\selectfont
}
\DeclareMathAlphabet{\mathbfsf}{OT1}{\sfdefault}{\bfdefault}{n}
\makeatother

\begin{document}

This {\bfseries is sans} and this \textbf{too}; what
about math? Here it is: $a\textbf{x}$; also italic is
applied: \textbf{\textit{abc}} or \textit{\textbf{abc}}.

\end{document}

当然,如果想要衬线数学粗体,\mathbfsf则应保留\mathbf并删除字体字母声明。

在此处输入图片描述

相关内容